java - hibernate - 从集合中删除项目

标签 java database hibernate parent-child

我想澄清一个关于 Hibernate 功能的假设。假设我有一个 A 类,@OneToMany 映射到 B。这些 B 每个都有一个 A 父引用以支持 A 上的 mappedBy 属性。

当我从 A 中的集合中删除 B 时,hibernate 是否能够自动清空 B 中的父字段?。从我所做的所有测试来看,当从集合中删除某些内容时,它实际上并没有通过更改子项中的父引用来更新数据库。

This link似乎支持我的主张,因为他们手动取消了父引用,并将其从父 Set 中删除。

最佳答案

每当从两端映射关联时,这些端之一被指定为主动端,而另一端被指定为被动端。 (被动端是使用 mappedBy=inverse="true" 映射的那一端)

Hibernate 不会,也不能在主动端发生变化时更新集合的被动端,因为它只能在刷新时检测到此类变化。因此,调用代码修改关联的两端被认为是一种很好的做法,以确保对象模型始终处于一致状态。

Hibernate 本身并不关心关联的两端是否一致,因为它只在刷新到数据库时查看 Activity 端。

映射一对多关联时,一对多端应指定为被动端。您链接到的 hibernate 手册中的部分试图解释原因。

关于java - hibernate - 从集合中删除项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7475800/

相关文章:

java - Spring 安全: I can save data despite the session is timed out

mysql - 使用 Spring MVC 将 MySQL 中的旧值与新数据连接起来

c++ - SOCI 行集<行> 奇怪的错误

java - 我需要在未映射的父类(super class)属性上使用 @Transient 注释吗?

java - com.mysql.jdbc.exceptions.MySQLNonTransientConnectionException : Connection. close() 已被调用。该状态下无效操作

java - 将java接口(interface)转换为Json

java - ora 12505 错误监听器拒绝连接

java - 跳帧,不显示进度对话框

database - 在 Oracle 中查找重叠时间

database - 将图像存储在数据库中