休眠-子级已删除,但父级未删除

时间:2020-01-02 16:12:45

标签: java hibernate orm

我有两个实体:

public class Branch extends IdModel {

   @Column(nullable = false)
   private Boolean warehouse;

   @OneToOne(optional = false)
   @JoinColumn(name = "delivery_address", nullable = false, orphanRemoval = true)
   private DeliveryAddress deliveryAddress;

   @ManyToOne(fetch = LAZY)
   @JoinColumn(name = "company", nullable = false)
   private Company company;

   @ManyToMany(mappedBy = "additionalBranches")
   private List<User> otherUsers = new ArrayList<>();

   @OneToMany(mappedBy = "homeBranch", orphanRemoval = true)
   private List<User> homeUsers = new ArrayList<>();

   @OneToMany(mappedBy = "branch", orphanRemoval = true, cascade = CascadeType.REMOVE)
   private List<BroadcastRule> broadcastRules = new ArrayList<>();
}

public class DeliveryAddress extends IdModel {

   @ManyToOne
   @JoinColumn(name = "owner_company", nullable = false)
   private Company ownerCompany;


   @OneToOne(mappedBy = "deliveryAddress")
   private Branch branch;

   .
   .
   .

}

我正在使用Spring的JpaRepository delete(T实体)方法删除分支。它所做的只是一堆选择查询,删除广播规则(如果有的话),但不删除分支实体本身-删除SQL查询不会发送到数据库。我试图直接使用本机查询删除Branch实体,但这只是导致约束冲突,因为deliveryAddress仍在引用Branch。我想避免手动删除所有相关内容,并希望让Hibernate为我完成这项工作。

我如何使休眠状态真正删除分支实体,然后删除传递地址?

1 个答案:

答案 0 :(得分:0)

解决了。拥有分支机构集合的“公司”实体将获取类型设置为急切,将其更改为懒惰就可以了。