我有两个实体:
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为我完成这项工作。
我如何使休眠状态真正删除分支实体,然后删除传递地址?
答案 0 :(得分:0)
解决了。拥有分支机构集合的“公司”实体将获取类型设置为急切,将其更改为懒惰就可以了。