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