DDDを適用するのは初めてです。EclipseLinkを使用しています。私は次の問題を抱えています。私のルートエンティティには子エンティティ(child
)があります。この子エンティティには子エンティティ(childSpecs
)もあります。
ルートエンティティ(root
)に子エンティティの作成と追加を任せたい:
root.addChild(arg1, agr2);
しかし、child
なしでは存在できませんchildSpecs
。の作成をchild
担当しましchildSpecs
た。
したがってaddChild(arg1, arg2)
、オブジェクトchild
を呼び出すと、childSpecs
作成され、相互に関連付けられroot
ます。ただしchildSpecs
、IDを保持する必須フィールドがありchild
ます。しかし、child
が作成されたとき、それはまだIDを持っていません。それが永続化されるときに作成されます。(現在、JPA機能TableGeneratorを使用して代理キー値を生成しています。)これを解決するためのソリューションを誰かが知っていますか。私の考えは、独自のIDジェネレーターを構築することでした。しかし、カウントの同時実行性を取り入れると、それは少し複雑になる可能性があります。
追加情報:
@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;