【问题标题】:Nullify transient references in Hibernate在 Hibernate 中取消瞬态引用
【发布时间】:2013-03-31 21:26:34
【问题描述】:

我有一个场景,我需要删除一个父实体,这样做我需要取消与父实体关联的引用。

例如我有两个表/实体人员和地址。 人是父母,地址是孩子(一对多)。 现在,当我删除 Person 时,我需要取消 Address 表中的人员引用。

我们是否有任何预定义的注释来完成这项工作。

非常感谢任何帮助/建议。

谢谢。

【问题讨论】:

  • 在 JPA 中,您必须手动执行此操作。我强烈怀疑 Hibernate 是否可以自动完成。还是很好奇。

标签: hibernate transient


【解决方案1】:

我看到的最简单的方法是在删除后刷新子实体。 由于您的关系是双向的,因此您可以使用父级上的 @PreRemove 方法自动管理它(将所有子级的父级引用设置为 null)。

恕我直言,transient这个词在这里被误用了,transient表示该属性不会被持久化,删除引用应该更合适。

【讨论】:

    【解决方案2】:

    你必须手动完成:

    @Entity
    public class Person {
        ...
        @OneToMany(mappedBy="person")
        public List<Address> addresses;  
        ...
    }
    
    @Entity
    public class Address {
        ...
        @ManyToOne
        public Person person;
        ...
    }
    
    for (Address address: person.addresses) {
        address.person = null;  
    }
    session.delete(person);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-22
      • 2012-06-27
      • 2019-12-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多