【发布时间】:2020-01-02 16:12:45
【问题描述】:
我有两个实体:
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 entity) 方法来删除一个分支。它所做的只是一堆选择查询,删除广播规则(如果有的话),但不会删除分支实体本身 - 删除 SQL 查询不会发送到数据库。我尝试使用本机查询直接删除分支实体,但这只是导致违反约束,因为 deliveryAddress 仍在引用分支。我想避免手动删除所有相关的东西,并希望让 Hibernate 为我完成这项工作。
我怎样才能让休眠以实际删除分支实体,然后删除收货地址?
【问题讨论】: