首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >双向OneToMany与OneToOne与mappedBy属性的关联

双向OneToMany与OneToOne与mappedBy属性的关联
EN

Stack Overflow用户
提问于 2021-08-18 13:22:59
回答 1查看 83关注 0票数 0

我定义了具有@OneToOne双向关系的实体。

关系的所有者站点(儿童类):

代码语言:javascript
运行
复制
@OneToOne
@JoinColumn(name = "owner_id")
private Parent parent;

其他站点(类):

代码语言:javascript
运行
复制
@OneToOne(mappedBy = "parent")
private Child child;

当我试图持久化具有子集的父级(这不是持久化的)时,我得到了异常。

  • TransientPropertyValueException:对象引用未保存的瞬态实例--在刷新

之前保存瞬态实例。

这看起来是可以理解的。

但是,当我用双向OneToMany/ManyToOne关联定义实体时,比如:

拥有这种关系的网站:

代码语言:javascript
运行
复制
@ManyToOne
@JoinColumn(name = "owner_id")
private Parent parent;

关系的另一面:

代码语言:javascript
运行
复制
@OneToMany(mappedBy = "parent")
private Set<Child> childrens = new HashSet<>();

并尝试持久化具有子集合集(不是持久化)的父级,然后我可以这样做,而Hibernate只保留父级。

对我来说,这看起来很奇怪,因为这个行为不是确定性的--我知道这个例子是不正确的,我可以使用CascadeType.ALL或者正确地保存它。你知道为什么看起来那样吗?Hibernate使用不同的算法在@OneToOne/@OneToMany关系中持久化实体

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-08-26 11:20:23

如果在cascade = PERSIST上使用@OneToMany,您应该会看到同样的错误。不同之处在于Hibernate并不试图“管理”相反方面的*到多个关联,即存在mappedBy的地方。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68833288

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档