gpt4 book ai didi

java - JPA - 如何将子实体添加到聚合根

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:30:39 24 4
gpt4 key购买 nike

我是第一次申请DDD。我使用 EclipseLink。我有以下问题。我的根实体有一个子实体 (child)。此子实体还有一个子实体 (childSpecs)。

我想让根实体(root)负责创建和添加子实体:

root.addChild(arg1, agr2);

但是 child 不能没有 childSpecs 存在。我让 child 负责创建 childSpecs

因此,当调用 addChild(arg1, arg2) 时,对象 childchildSpecs 被创建并且与彼此和 root 相关。但是 childSpecs 有一个必填字段,用于保留 child 的 ID。但是当 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;

最佳答案

JPA 2.0 允许从引用派生 ID,允许您将 RootChildSpecs->RootChild 标记为 rootChildSpecs 的 ID 的一部分,并在它生成时从中提取值。这里有一个简单的例子 http://wiki.eclipse.org/EclipseLink/Examples/JPA/2.0/DerivedIdentifiers

您可以使用@mapsId 标记关系以指向它在 embeddedid 中映射的属性,因为 Embeddedid 和 pk 类本身不能包含关系。

关于java - JPA - 如何将子实体添加到聚合根,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14498703/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com