这是我第一次申请DDD。我使用EclipseLink。我有以下问题。
我的根实体有一个子实体(child
)。该子实体还具有子实体(childSpecs
)。
我想让根实体(root
)负责创建和添加子实体:
root.addChild(arg1, agr2);
但如果没有child
,childSpecs
就不能存在。我让child
负责创建childSpecs
。
因此,在调用addChild(arg1, arg2)
时,会创建对象child
和childSpecs
并与彼此和root
相关联。但childSpecs
有一个必填字段,用于保存child
的ID。但是当创建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;
答案 0 :(得分:1)
JPA 2.0允许从引用中派生ID,允许您将RootChildSpecs-&gt; RootChild标记为rootChildSpecs ID的一部分,并在生成时从中提取值。这里有一个简单的例子http://wiki.eclipse.org/EclipseLink/Examples/JPA/2.0/DerivedIdentifiers
您可以使用@mapsId标记关系,以指向它在嵌入式中的mapps属性,因为Embeddedid和pk类本身不能包含关系。
答案 1 :(得分:1)
我建议不要使用EmbeddedId,而是将@ManyToOne上的@Id放到RootChild并使用@IdClass。
请参阅, http://en.wikibooks.org/wiki/Java_Persistence/Identity_and_Sequencing#JPA_2.0