Режим гибернации по умолчанию при удалении объектов со связанными записями

У меня есть простой один ко многим отношениям, как так:

Сущность Клиент:

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

Билет Сущности

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

Когда я удаляю сущность customer, которая имеет связанные записи в Ticket, Hibernate будет ‘null’ customer_id в Ticket для этих записей и удалить клиента.
Это обходит существующее ограничение on DELETE RESTRICT на FK on customer_id.

I want Hibernate to throw an exception rather than nulling customer_id in related records.
Как я могу этого достичь?
Я думал, что это должно быть поведение по умолчанию, но это, кажется, не так

1 ответ

  1. Я нашел решение сам:
    Причиной такого поведения является ошибка отображения. Столбец @JoinColumn должен быть определен в принадлежащем объекте (тикете), а объект-владелец (клиент) должен определить ‘mappedBy’.

    @ManyToOne
    @JoinColumn(name = "customer_id")
    public Customer getCustomer() {
    
    ....
    
    @OneToMany(targetEntity = Ticket.class, mappedBy = "id")
    public Set<Ticket> getTickets() {
        return tickets;
    }