这是我第一次申请DDD。我使用 EclipseLink。我有以下问题。我的根实体有一个子实体 ( child
)。该子实体还有一个子实体 ( childSpecs
)。
我想让根实体 ( root
) 负责创建和添加子实体:
root.addChild(arg1, agr2);
但child
不能没有childSpecs
. 我child
负责创建childSpecs
.
因此,当调用addChild(arg1, arg2)
对象时child
和childSpecs
被创建并且彼此相关并且root
. 但是childSpecs
有一个强制字段,它保留child
. 但是在child
创建时它还没有一个 id。这将在持久化时创建。(目前我使用 JPA 功能 TableGenerator 来生成我的代理键值。)有人知道解决这个问题的解决方案吗?我的想法是建立自己的 id-generator。但是在考虑并发时这可能有点复杂。
附加信息:
@Entity
@Table (name = "root")
public class Root implements Serializable {
@Id
@Basic (optional = false)
@Column (name = "root_id")
private Integer rootId;
@OneToMany (mappedBy = "root")
private List<RootChild> rootChildList;
-
@Entity
@Table (name = "root_child")
public class RootChild implements Serializable {
@Id
@Basic (optional = false)
@Column (name = "root_child_id")
private Integer rootChildId;
@JoinColumn (name = "root_id", referencedColumnName = "root_id")
@ManyToOne
private Root root;
@OneToMany (cascade = CascadeType.ALL, mappedBy = "rootChild")
private List<RootChildSpecs> rootChildSpecsList;
-
@Entity
@Table (name = "root_child_specs")
public class RootChildSpecs implements Serializable, Mutable<RootChildSpecs> {
@EmbeddedId
protected RootChildSpecsPK rootChildSpecsPK;
@JoinColumn (
name = "root_child_id",
referencedColumnName = "root_child_id",
insertable = false,
updatable = false
)
@ManyToOne (optional = false)
private RootChild rootChild;
-
@Embeddable
public class RootChildSpecsPK implements Serializable {
@Basic (optional = false)
@Column (name = "root_child_id")
private int rootChildId;
@Basic (optional = false)
@Column (name = "d_rec")
private int dRec;
@Basic (optional = false)
@Column (name = "t_rec")
private int tRec;