Hibernate @ManyToOne Каскадный микс - PullRequest
0 голосов
/ 08 января 2019

Недавно я разрабатывал базовый проект и наткнулся на сценарий. Допустим, у меня есть School со списком User с, которые могут иметь новый или существующий адрес, как показано ниже:

@Table("school") @Entity
class School {
    @OneToMany(cascade=CascadeType.ALL, mappedBy="school")
    private List<User> students;
}

@Table("user") @Entity
class User {
    @ManyToOne
    @JoinColumn(...)
    private School school;

    @ManyToOne(cascade=?)
    @JoinColumn(...)
    private Address address;
}

@Table("address") @Entity
class Address { ... } // No bi-directional relationship

Всякий раз, когда я пытаюсь упорствовать, я получаю выходные данные:

  1. Если School имеет только User s с новым адресом, а тип каскада установлен на ALL или PERSIST, сохранение нового экземпляра School работает как положено.

  2. Если School имеет только User с существующим адресом и опущен каскадный тип, он работает, как и ожидалось, при сохранении нового School.

  3. При сохранении нового экземпляра School, содержащего User s, с новым и существующим адресом и CascadeType, установленным в ALL, следующее исключение выдается org.hibernate.PersistentObjectException: detached entity passed to persist. (Я так понимаю, что список сохранил адрес)

  4. При сохранении экземпляра School со смешанными User с новым и существующим адресом, но без установленного каскадного типа, выдается временное исключение, как и ожидалось.

Интересно, есть ли решение, кроме сохранения каждого адреса пользователя перед сохранением School объекта.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...