- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我对 JPA 2.0、Hibernate 和“orphanRemoval”有疑问。
首先我的设置:
我有两个相当简单的实体类,“User”和“AvatarImage”,“User”有一个“AvatarImage”,所以“User”和“AvatarImage”之间存在关系。
在“用户”类中,属性如下所示:
// class "User"
@OneToOne(cascade = CascadeType.ALL, fetch=FetchType.LAZY, orphanRemoval = true)
private AvatarImage avatarImage;
这意味着,如果“avatarImage”属性设置为 null,“User”和“AvatarImage”之间的引用将被删除,“orphanRemoval”机制将从数据库中删除“avatarImage”(如果我我错了)。
所以当我为某个用户更新“avatarImage”时,我目前必须这样写:
user.setAvatarImage( null ); // First set it to null
userRepository.save( user ); // Now "orphanRemoval" will delete the old one
user.setAvatarImage( theNewAvatarImage );
userRepository.save( user );
所以首先将“avatarImage”属性设置为空,保存“用户”,然后设置新的头像“theNewAvatarImage”,再次保存用户。
这是它目前对我有用的唯一方法——“orphanRemoval”将删除旧的“avatarImage”,将其设置为“null”,然后保存用户。
但是,我认为这段代码也应该有效:
user.setAvatarImage( theNewAvatarImage );
userRepository.save( user );
所以我省略了将“avatarImage”设置为“null”,只是设置了“theNewAvatarImage”,替换了旧的“avatarImage”。但这不起作用,旧的 AvatarImage 不会在事务提交时从数据库中删除。
有谁知道,为什么第二个代码(只是替换 AvatarImage 之前没有将其设置为“null”)不起作用?
非常感谢您提供的任何帮助
非常感谢!
最佳答案
这与 Hibernate JIRA 门票有关 HHH-5559和 HHH-6484 .总的来说,从今天开始,Hibernate 要求您将引用设置为 null 并刷新持久性上下文,然后再为关系提供新值(请参阅 HHH-6484 中的测试用例);只有在这种情况下,Hibernate 才会发出 SQL DELETE
语句,为 orphanRemoval
提供损坏的实现(恕我直言)。
简而言之,您需要等待错误被修复,或者编写代码使引用无效并刷新持久性上下文,或者以这种方式使用支持 orphanRemoval
的 JPA 提供程序 ( EclipseLink 2.3.0 可以)。
关于java - JPA 2.0/Hibernate 和 "orphanRemoval": Just replacing an entity does not remove the old one,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7510388/
我有 2 个实体: 轨迹 引用资料 在每个Locus上我们可以定义很多不同的References,一个Reference可以被很多Locus使用。然后我有一个 ManyToMany 关系。 但是,在我
以下两个类(CD 和 DVD)彼此不相关。每个类都有不同的表。但都有子类,如地址。 保存 DVD/CD 的值时,条目插入到相应的表中。因此,当我尝试在 Address_Table 中添加值时,它使用
我在使用 hibernate 持久化克隆对象时遇到了问题。当它的嵌套子项被删除时,记录并没有从数据库中删除(我已经设置了 orphanRemoval = true)。 在下面的代码中,使用 json
我对双向 OneToOne 关系和孤儿删除有点困惑。这些是我的实体: @Entity @Table(name = "city") public class City { @Id @Ge
根据这篇文章Difference between @OneToMany and @ElementCollection?我应该更喜欢 @ElementCollection 用于可嵌入类型,而 @OneT
我有实体 Event 与另一个实体有特定关系: @OneToMany(cascade = CascadeType.ALL, orphanRemoval = true, mappedBy = "even
我有一个 RECIPE 表,它与 INGREDIENT 表具有 OneToMany 关系,因为单个配方可以包含多种成分。问题是,如果用户删除一个成分(前端将所有字段(ingredient_id 和 i
我的目的是仅当实体连接音轨没有其他记录时才删除实体艺术家中的记录。 我尝试以这种方式使用 orphanRemoval: Soundtrack.php /** * @Assert\NotBlank(m
我到处搜索,但没有找到好的答案。 我正在使用 Hibernate + Spring + Mysql 开发一个 Maven 应用程序。 这是我的 application-context.xml :
我有非常具体的情况,并尝试了不同的场景来实现从Java集合中删除时从数据库中删除。 我的 House 与 Room 具有 OneToMany 关系,而 Room 与 Bed 具有 OneToMany
我一直在阅读有关 orphanRemoval= true 的帖子在 JPA 中。根据文档: orphanRemoval is a flag - Whether to apply the remove
我在 Hibernate 引用书的第 21 章中有一个基本的一对多父/子关系。 级联仅从子级到父级(持久级联只是因为我不想删除子级时删除父级)。 当我将一个 child 添加到 parent 并保存
以下示例已简化。 我有以下数据库结构: X -xid VARCHAR Y -yid VARCHAR -xid VARCHAR -zid VARCHAR Z -zid VARCHAR 我有以下
假设我们有两个实体(Profile 和Address)。一个配置文件可以有多个地址。在这种情况下,我们有: Profile: ... fields: ... o
我在使用 JPA/Hibernate (3.5.3) 设置时遇到问题,其中我有一个实体,一个“Account”类,它有一个子实体列表,“Contact”实例。我正在尝试能够将 Contact 的实例添
我有一个带有 fos restbundle 的 Symfony rest api 构建,我正在反序列化一个 json PUT 请求,以便更新具有多对多关系的学说实体。 但是,配置了orphanremo
因此,在我的一个实体中将 orphanRemoval = true 添加到 @OneToMany 关系后,在尝试保存新实体或删除现有实体时,出现以下异常:引用带有 orphanRemoval = tr
我正在使用 JPA 2.1、EclipseLink 2.5.0、SQLite3 数据库和 Swing 制作一个应用程序。 我有两个实体,EntityClient和EntityPhone ,其中第一个有
上面两个选项有什么区别?什么时候选择每个选项更合适? 最佳答案 它们之间的基本区别是: When using the orphanRemoval=true option Doctrine makes
我正在使用 hibernate 4.1.0,jpa 2.1。当我尝试建立一对多关系时,出现上述错误。我已经尝试过其他关于堆栈溢出的解决方案,但它们对我不起作用 这是我的 Bean 类: @Entity
我是一名优秀的程序员,十分优秀!