2008-09-26 1 views
2

Есть ли способ добавить один критерий на уровне фабричной установки (конфигурации), который будет применяться к ? Все entites retreived with Session? У нас есть требование не удалять строки из нашей базы данных, а «отмечать» удаленные объекты как таковые, чтобы они не участвовали в каких-либо дополнительных операциях.Hibernate global filtration creteria

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

ответ

2

The Hibernate Documentation уточняет это немного больше. Похоже, что лучший способ справиться с этим - с фильтрами.

Во-первых, вы определяете Фитлер на классе или коллекции, как так:

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

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

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

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

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

Смежные вопросы