Массовое удаление / обновление в спящем режиме: лучший подход? - PullRequest
1 голос
/ 21 февраля 2011

Я знаю, что в спящем режиме (или даже в JPA?) Операции массового удаления не касаются связанных объектов.

Предположим, у вас есть следующие объекты A, B и C.
B имеет отношение ManyToOne с A, но оно не инвертировано (поэтому у A нет списка B).
C имеет отношение ManyToOne с B, но оно также не инвертировано (поэтому у B нет списка C).

Теперь, если A будет удален, я хочу, чтобы все B, ссылающиеся на этот A, были удалены, и все C, ссылающиеся на эти B, также будут удалены. Поскольку каскадирования нет, мне нужно распространять эти удаления самостоятельно. Таким образом, вопрос в том, что будет лучшим подходом для этого:

  1. sql (удалить из C, где b_id IN (выберите из B, где a_id in (выберите id из A ...
  2. использование hibernate: загрузить все C для A, а затем удалить эти объекты, а затем загрузить все B для A и удалить их; наконец удалите A
  3. ???

Ответы [ 2 ]

2 голосов
/ 21 февраля 2011

Я думаю, что HQL - лучший вариант

1 голос
/ 21 февраля 2011

Вы можете использовать hibernate для выполнения собственных операторов SQL.Например, вы можете написать что-то вроде этого:

session.createSQLQuery("delete from C where b_id IN (select is from B where a_id in (select id from A ...");

и вы можете проверить это руководство Hibernate native SQL

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