Спящая глобальная фильтрация - PullRequest
2 голосов
/ 26 сентября 2008

Есть ли способ добавить один критерий на уровне фабрики (конфигурации) сеанса, который будет применяться к всем объектам, полученным с помощью сеанса? У нас есть требование не удалять строки из нашей базы данных, а "помечать" удаленные объекты как таковые, чтобы они не участвовали в каких-либо дальнейших операциях.

Я знаю, что мы можем просто извлечь все энтиты через общий интерфейс (например, общий базовый объект Dao), но подход с глобальной фильтрацией будет менее подвержен ошибкам, поскольку не требует знаний об использовании этого общего интерфейса. .

1 Ответ

2 голосов
/ 26 сентября 2008

Документация Hibernate подробно описывает это. Похоже, лучший способ справиться с этим с помощью фильтров.

Сначала вы определяете подборщик для класса или коллекции следующим образом:

<filter-def name="IsDeletedFilter">
  <filter-param name="IsDeleted" type="bool"/>
</filter-def>

Затем вы присоединяете его к классу или коллекции:

<class/set  ...>
...
<filter name="IsDeletedFilter" condition=":IsDeleted = Is_Deleted"/>

Увы, вы должны делать это с каждым классом, который вы хотите мягко удалить. Но вы можете составить карту базового класса SoftDeleteEntity и иметь таблицу для каждой иерархии подклассов.

Я также видел, как некоторые люди утверждают, что могут делать это со слушателями, хотя я не знаю, как.

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