当前位置: 首页 > 知识库问答 >
问题:

具有mappedBy属性的双向OneToMany与OneToOne关联

曹光霁
2023-03-14

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

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

@OneToOne
@JoinColumn(name = "owner_id")
private Parent parent;

其他站点(父类):

@OneToOne(mappedBy = "parent")
private Child child;

当我试图坚持有子集的父母(不坚持),然后我得到了例外

  • TransientPropertyValueException:对象引用未保存的临时实例-在刷新之前保存临时实例

这看起来可以理解。

但当我定义具有双向一对一/多对一关联的实体时,如:

此关系的所有者站点:

@ManyToOne
@JoinColumn(name = "owner_id")
private Parent parent;

关系的另一面:

@OneToMany(mappedBy = "parent")
private Set<Child> childrens = new HashSet<>();

并尝试持久化具有子集合集(未持久化)的父集合,然后我可以执行此操作并Hibernate仅持久化父集合。

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

共有1个答案

牟嘉
2023-03-14

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

 类似资料:
  • 问题内容: 我正在为我的实习工作开发JPA兼容套件…该套件的一部分涉及测试极端情况的正确实现。 具有mapedBy属性。JPA指出: 字符串mappingBy-拥有关系的字段或属性。除非关系是单向的,否则为必需。 没有给出默认值-默认列为空。 给定双向-此示例来自JPA 2.0 JSR-317规范本身! 顾客 电话号码 尚未在of的中定义mapledBy属性!我不知道的双向映射有默认值吗? 我查看

  • 我有三个班,站点,GoupIP和IP 一个站点有一个或多个抱怨。GroupIP有一个或多个IP。 代码如下: 地点 群居 IP 在GroupIp课堂上,我得到: 在属性“ips”中,“映射者”值“groupip”无法解析为目标实体上的属性。 我的代码出了什么问题??

  • 问题内容: 假设我有两个实体: 然后,我要保留“客户”实体,然后,参照先前添加的“客户”保留“订单”实体。当我从数据库中检索此客户并调用getOrders时,它将返回空集。这是正常行为吗?如果是,当我添加新的Order实体时,我该怎么做以自动刷新此集合? 问题答案: Jpa不会为您维护关系,因此应用程序需要设置双向关系的两端,以使它们与数据库保持同步。当您设置了order-> customer关系

  • 问题内容: 假设我有个人 和工作 提取时,我无法将Person和Job映射到其他实体。 我在做什么错? 问题答案: 您的代码应为: (尝试从工作中删除重复的列’person_id’) 或其他共享主键的方法:

  • 我有以下三个实体: 人 客户端具有个人id外键和区域id外键。一个人可以有很多客户,每个客户都属于一个地区。我正在尝试使用Laravel中的单个查询获取一个人的客户列表以及每个客户的区域。我曾经亲自与客户建立过很多关系,这很好。我正在尝试使用hasManyThrough方法来查询一个人,并获取他的客户和他们所在的地区,但我无法让它工作!我的关系设置为: 人有很多客户 客户属于区域 人已通过(客户,

  • 我在将带有@ManyToOne关系的实体(雇员)映射到带有@OneToMany关系的实体(社区)时遇到了问题。 当我将一个实体(社区)分配给一个实体(员工),其中社区的值为空时,它工作正常。 问题出现了,如果雇员已经为社区分配了价值。当我更改该值并保存更改时,该员工为社区获得了新的值,并且这个新社区在集合中获得了该员工。唯一的问题是,老社区仍然有这个员工在收集,但它应该被删除。这只有在数据库重新启