休眠全局过滤条件

时间:2020-03-06 14:46:36  来源:igfitidea点击:

有没有一种方法可以在会话工厂(配置)级别上添加单个条件,从而将所有适用于会话的实体都应用?
我们要求不要从数据库中删除任何行,而应这样"标记"已删除的实体,以使它们不参与任何进一步的操作。

我知道我们可以通过一个公共接口(例如一个公共基本Dao对象)来检索所有实体,但是使用全局过滤的方法不那么容易出错,因为它不需要使用该公共接口的知识。

解决方案

Hibernate文档对此进行了详细说明。看来处理此问题的最佳方法是使用过滤器。

首先,我们可以在类或者集合上定义拟合器,如下所示:

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

然后将其添加到类或者集合中:

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

las,我们必须对要软删除的每个类都执行此操作。但是,我们可能可以映射出基类" SoftDeleteEntity",并在每个子类层次结构中都有一个表。

我也看到有些人声称能够对听众进行此操作,尽管我不知道该如何做。