Hibernate - управление запросами на вставку и обновление - PullRequest
3 голосов
/ 26 апреля 2010

Рассмотрим следующую связь В книге есть главы OneToMany

Если я выполню:

session.save(book)
session.save(chapter)
session.getTransaction().commit()

Hibernate генерирует запрос вставки для книги и запрос вставки для главы

Но если я выполню:

session.save(chapter)
session.save(book)
session.getTransaction().commit()

Hibernate выполняет запрос вставки для главы, вставляет запрос для книги и обновляет запрос для главы.

Есть ли способ сделать это в 2 вставках вместо 2 вставок и 1 обновления? (Предположим, что генерация первичного ключа аналогична Identity, а Chapter.Book обнуляется)

1 Ответ

4 голосов
/ 26 апреля 2010

Это потому, что у вас, вероятно, Book 1..n Chapter, с cascade, установленным (по крайней мере) PERSIST. Это означает, что при сохранении книги все ее главы также сохраняются.

То есть вы пытаетесь сохранить главы дважды. Вам не нужно второе сохранение (во втором примере)

Первый пример работает таким образом, потому что глава стала ассоциироваться с сеансом (возможно, вы не переопределили методы hashCode() и equals()), а save() вообще ничего не делает.

Но это все догадки. Вы должны показать свои сопоставления.

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