删除具有相关记录的实体时的 Hibernate 默认行为
Hibernate default behaviour when deleting entities with related records
我有一个简单的一对多关系,如下所示:
实体客户:
...
@OneToMany(targetEntity = Ticket.class)
@JoinColumn(name = "customer_id")
public Collection<Ticket> getTickets() {
return tickets;
}
实体票证
....
@ManyToOne
public Customer getCustomer() {
return customer;
}
当我删除在Ticket中有相关记录的客户实体时,Hibernate会'null'customer_id在Ticket中针对这些记录删除客户。
这绕过了 customer_id.
上 FK 上现有的 ON DELETE RESTRICT 约束
我希望 Hibernate 在相关记录中抛出异常而不是清空 customer_id。
我怎样才能做到这一点?
我认为这应该是默认行为,但事实并非如此
我自己找到了解决方案:
此行为的原因是映射错误。 @JoinColumn 必须在拥有实体 (Ticket) 中定义,而拥有实体 (Customer) 必须定义 'mappedBy'.
@ManyToOne
@JoinColumn(name = "customer_id")
public Customer getCustomer() {
....
@OneToMany(targetEntity = Ticket.class, mappedBy = "id")
public Set<Ticket> getTickets() {
return tickets;
}
我有一个简单的一对多关系,如下所示:
实体客户:
...
@OneToMany(targetEntity = Ticket.class)
@JoinColumn(name = "customer_id")
public Collection<Ticket> getTickets() {
return tickets;
}
实体票证
....
@ManyToOne
public Customer getCustomer() {
return customer;
}
当我删除在Ticket中有相关记录的客户实体时,Hibernate会'null'customer_id在Ticket中针对这些记录删除客户。 这绕过了 customer_id.
上 FK 上现有的 ON DELETE RESTRICT 约束我希望 Hibernate 在相关记录中抛出异常而不是清空 customer_id。 我怎样才能做到这一点? 我认为这应该是默认行为,但事实并非如此
我自己找到了解决方案: 此行为的原因是映射错误。 @JoinColumn 必须在拥有实体 (Ticket) 中定义,而拥有实体 (Customer) 必须定义 'mappedBy'.
@ManyToOne
@JoinColumn(name = "customer_id")
public Customer getCustomer() {
....
@OneToMany(targetEntity = Ticket.class, mappedBy = "id")
public Set<Ticket> getTickets() {
return tickets;
}