删除具有相关记录的实体时的Hibernate默认行为

时间:2016-05-25 13:54:40

标签: hibernate constraints one-to-many delete-row

我有一个简单的一对多关系,如此:

实体客户:

...
@OneToMany(targetEntity = Ticket.class)
@JoinColumn(name = "customer_id")
public Collection<Ticket> getTickets() {
    return tickets;
}

实体票

....
@ManyToOne
public Customer getCustomer() {
    return customer;
}

当我删除在Ticket中具有相关记录的客户实体时,Hibernate将在Ticket中为这些记录“null”customer_id并删除该客户。 这绕过了customer_id上FK上现有的ON DELETE RESTRICT约束。

我希望Hibernate抛出异常而不是在相关记录中归零customer_id。 我怎样才能做到这一点? 我认为这应该是默认行为,但似乎并非如此

1 个答案:

答案 0 :(得分:0)

我自己找到了解决方案: 此行为的原因是映射错误。 @JoinColumn必须在拥有的实体(Ticket)中定义,而拥有的实体(Customer)必须定义&#39; mappedBy&#39;。

@ManyToOne
@JoinColumn(name = "customer_id")
public Customer getCustomer() {

....

@OneToMany(targetEntity = Ticket.class, mappedBy = "id")
public Set<Ticket> getTickets() {
    return tickets;
}