我正在尝试实现一个Soft-deletable存储库。通常,使用Delete Event侦听器可以轻松完成此操作。要过滤掉已删除的实体,我可以在我的类映射中添加 Where 属性。但是,我还需要在该实体的存储库中实现另外两种方法:恢复和清除。恢复将“取消删除”实体,清除将硬删除它们。这意味着我不能使用Where属性(因为它阻止了软删除的实体到任何访问)
我尝试使用过滤器。我可以创建一个过滤器并在会话中启用或禁用它以获得相同的结果。但问题是过滤器对Session.Get方法没有任何影响(它们只影响基于ICriteria的访问)。
关于如何解决这个问题的任何想法?
由于
答案 0 :(得分:2)
按设计。过滤器不能使用Get或Load,因为它们意味着:我想要 使用此ID加载实体。
动态过滤器使用HQL / Criteria和Collection(启用时) 对于集合)仅在使用显式连接时,或者更一般地, 当过滤器的QuerySpace与查询的QuerySpace匹配时。
答案 1 :(得分:0)
IInterceptor会为此工作吗?
查看EmptyInterceptor我发现它有一个OnLoad,我认为你可以使用它来拦截对象加载。