【发布时间】:2008-09-26 10:21:45
【问题描述】:
有没有办法在会话工厂(配置)级别添加单个条件,该条件将应用于通过 Session 检索到的所有实体? 我们要求不要从我们的数据库中删除任何行,而是“标记”已删除的实体,这样它们就不会参与任何进一步的操作。
我知道我们可以通过一个公共接口(例如一个公共基础 Dao 对象)检索所有实体,但是使用全局过滤的方法不太容易出错,因为它不需要使用这个公共接口的知识.
【问题讨论】:
有没有办法在会话工厂(配置)级别添加单个条件,该条件将应用于通过 Session 检索到的所有实体? 我们要求不要从我们的数据库中删除任何行,而是“标记”已删除的实体,这样它们就不会参与任何进一步的操作。
我知道我们可以通过一个公共接口(例如一个公共基础 Dao 对象)检索所有实体,但是使用全局过滤的方法不太容易出错,因为它不需要使用这个公共接口的知识.
【问题讨论】:
The Hibernate Documentation 对此进行了详细说明。看起来处理这个问题的最好方法是使用过滤器。
首先,您在类或集合上定义一个 fitler,如下所示:
<filter-def name="IsDeletedFilter">
<filter-param name="IsDeleted" type="bool"/>
</filter-def>
然后你将它附加到一个类或集合中:
<class/set ...>
...
<filter name="IsDeletedFilter" condition=":IsDeleted = Is_Deleted"/>
唉,您必须对要软删除的每个类都执行此操作。但是您可能能够映射出一个基类SoftDeleteEntity 并为每个子类层次结构创建一个表。
我也看到有些人声称能够对听众做到这一点,但我不知道如何。
【讨论】: