2016-05-25 3 views
0

у меня есть простой один ко многим отношений, как так:Hibernate поведение по умолчанию при удалении объектов с соответствующими записями

Entity Заказчик:

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

Entity Ticket

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

При удалении объект клиента, который имеет связанные записи в Ticket, Hibernate будет «null» customer_id в Ticket для этих записей и удалить клиента. Это обходит существующее ограничение ON DELETE RESTRICT на FK на customer_id.

Я хочу, чтобы Hibernate выдавал исключение вместо обнуления customer_id в связанных записях. Как я могу это достичь? Я думал, что это должно быть поведение по умолчанию, но это, похоже, не так.

+0

Использование по Hibernate конкретных без JPA совместимый '@ OnDelete' аннотацию http://stackoverflow.com/questions/8563592/jpas-cascade-remove-and-hibernates-ondelete-used-together –

ответ

0

Я нашел решение самостоятельно: Причиной такого поведения является ошибка сопоставления. @JoinColumn должен быть определен в принадлежащем ему объекте (Ticket), в то время как владелец (Клиент) должен определить «mappedBy».

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

.... 

@OneToMany(targetEntity = Ticket.class, mappedBy = "id") 
public Set<Ticket> getTickets() { 
    return tickets; 
} 
Смежные вопросы