Использование collection.clear () для @ManyToMany в Spring-> JPA-> Hibernate приводит к N операторам удаления - PullRequest
0 голосов
/ 24 мая 2011

При использовании c.clear (), где c имеет тип Collection, представляющий отношение владельца @ManyToMany, Spring-> JPA-> Hibernate создает один оператор удаления для каждой записи в коллекции, например:

Hibernate: delete from printer_feature where printers_id=? and features_id=? Hibernate: delete from printer_feature where printers_id=? and features_id=? Hibernate: delete from printer_feature where printers_id=? and features_id=? Hibernate: delete from printer_feature where printers_id=? and features_id=? Hibernate: delete from printer_feature where printers_id=? and features_id=?

Я читал, что в Hibernate есть что-то, называемое пакетной обработкой, но я не уверен, может ли это помочь или как-то «намекается» в аннотациях JPA.Я пытаюсь уменьшить количество операторов удаления здесь.

Как это можно оптимизировать до:

1) delete from printer_feature where printer_id = ?, в конце концов, я делаю clear() для коллекциитак что все должно очиститься, верно?

2) delete from printer_feature where printer_id = ? and feature_id in (?, ?, ?, ....) в качестве компромисса можно ли это заменить одним удалением в этом формате?

Спасибо.-AP_

1 Ответ

1 голос
/ 24 мая 2011

Я не знаю такой опции. Проблема с пакетным удалением заключается в том, что удаляемые объекты также могут иметь ассоциации.

Для этого можно использовать HQL-запрос, но он не учитывает любые каскады ассоциаций (запрос на удаление hql почти такой же, как и в SQL-эквиваленте)

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