gpt4 book ai didi

java - 坚持后如何填充完整的实体?

转载 作者:行者123 更新时间:2023-11-29 13:54:50 24 4
gpt4 key购买 nike

我正在使用 Hibernate 持久性 API。我有两个实体,您可以检查它们的父实体:(子实体不包含对父实体的任何引用 - 因为它在逻辑上不是必要的业务。)

@Entity(...)
public class ParentEntity implements Serializable {
@Id
private Integer id;

// ...

@OneToMany(fetch = FetchType.LAZY)
@org.hibernate.annotations.Cascade({ org.hibernate.annotations.CascadeType.ALL }) // losing JPA's portability
@JoinColumn(name = "parent_id", referencedColumnName = "id")
private Set<ChildEntity> children;

// ...
}

当我保留一个新的父实体时,将执行一个数据库触发器。此触发器按默认值插入一些子项。但是坚持之后, children 不在集合中。 我该如何解决这个问题?这是我的 Dao 方法:

@Transactional(readOnly = false)
@Override
public Parent addParent(String name) {
Parent temp = new Parent(name);
entityManager.persist(temp);

return entityManager.find(Parent.class, temp.getId()); // return temp;
}

非常感谢您所做的一切。

最佳答案

Parent temp = new Parent(name);
entityManager.persist(temp);

如果我正确地找到你,

您正在创建一个新的父对象(没有任何子实体)并将其持久化。因此,没有任何子对象的父对象会持久保存在数据库中。

当你做的时候

entityManager.find(Parent.class, temp.getId());

您不能指望拥有包含子实体的父类。

由于您是通过数据库触发器持久化子对象,因此必须有一些方法来放置 parent_id (tem.getId()/parent.getId())在他们中

没有其他方法可以找到持久父对象的子对象。

关于java - 坚持后如何填充完整的实体?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34249324/

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