休眠全局过滤条件
时间: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",并在每个子类层次结构中都有一个表。
我也看到有些人声称能够对听众进行此操作,尽管我不知道该如何做。