Вопрос

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

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

Это было полезно?

Решение

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

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top