在 EclipseLink 中使用 @AdditionalCriteria 很容易,例如过滤掉软删除的实体,但是在执行特定查询之前有什么方法可以暂时禁用它?
问问题
1843 次
3 回答
6
是的,这是可能的,有一个简单的解决方法。我像这样指定了@AdditionalCriteria 注释:
@AdditionalCriteria(":disableDeletedFeature = 1 or this.isDeleted = false")
并为 persistence.xml 中的禁用标志指定了默认属性值:
<property name="disableDeletedFeature" value="0"/>
因此默认情况下启用过滤,但您可以在 EntityManager 级别轻松禁用它,如下所示:
entityManager.setProperty("disableDeletedFeature", 1);
对我来说一切正常,希望对我有帮助!
于 2013-04-11T10:42:55.660 回答
1
如果您使用本机 SQL 查询,则不会附加条件。
否则,没有简单的方法来禁用它被附加,除非您创建另一个持久性单元或另一个没有附加条件的类。
您可以做的一件事是在基于会话属性的条件中放置一个 OR 条件,然后当您将此属性设置为 true 时,您可以禁用该条件。
您可以记录增强请求以添加不将其附加到查询的选项。
于 2013-04-08T14:18:10.367 回答
0
我使用eclipselink 2.4.1。它仅与引号一起用于属性值:
@AdditionalCriteria(":disableDeletedFeature = '1' or this.isDeleted = false")
和这里:
entityManager.setProperty("disableDeletedFeature", '1');
于 2015-02-19T11:00:44.490 回答