我定义了具有@OneToOne双向关系的实体。
关系的所有者站点(儿童类):
@OneToOne
@JoinColumn(name = "owner_id")
private Parent parent;
其他站点(父类):
@OneToOne(mappedBy = "parent")
private Child child;
当我试图持久化具有子集的父级(这不是持久化的)时,我得到了异常。
之前保存瞬态实例。
这看起来是可以理解的。
但是,当我用双向OneToMany/ManyToOne关联定义实体时,比如:
拥有这种关系的网站:
@ManyToOne
@JoinColumn(name = "owner_id")
private Parent parent;
关系的另一面:
@OneToMany(mappedBy = "parent")
private Set<Child> childrens = new HashSet<>();
并尝试持久化具有子集合集(不是持久化)的父级,然后我可以这样做,而Hibernate只保留父级。
对我来说,这看起来很奇怪,因为这个行为不是确定性的--我知道这个例子是不正确的,我可以使用CascadeType.ALL或者正确地保存它。你知道为什么看起来那样吗?Hibernate使用不同的算法在@OneToOne/@OneToMany关系中持久化实体
发布于 2021-08-26 11:20:23
如果在cascade = PERSIST
上使用@OneToMany
,您应该会看到同样的错误。不同之处在于Hibernate并不试图“管理”相反方面的*到多个关联,即存在mappedBy
的地方。
https://stackoverflow.com/questions/68833288
复制相似问题