例如,在EclipseLink中使用@AdditionalCriteria很容易过滤掉软删除的实体,但在执行特定查询之前有没有办法暂时禁用它?
答案 0 :(得分:6)
是的,通过简单的解决方法,这是可能的。我指定了@AdditionalCriteria注释,如下所示:
@AdditionalCriteria(":disableDeletedFeature = 1 or this.isDeleted = false")
并为persistence.xml中的disable标志指定了默认属性值:
<property name="disableDeletedFeature" value="0"/>
因此默认情况下启用过滤功能,但您可以在EntityManager级别轻松禁用它,如下所示:
entityManager.setProperty("disableDeletedFeature", 1);
对我来说一切正常,希望它有所帮助!
答案 1 :(得分:1)
如果使用本机SQL查询,则不会附加条件。
否则没有简单的方法可以禁用它,除非你创建另一个持久性单元,或者没有附加标准的其他类。
您可以做的一件事是根据会话属性在条件中添加OR条件,然后在将此属性设置为true时,可以禁用条件。
您可以记录增强请求,以添加一个选项,不将其附加到查询中。
答案 2 :(得分:0)
我使用eclipselink 2.4.1。它仅适用于QUOTATION MARK以获取属性值:
@AdditionalCriteria(":disableDeletedFeature = '1' or this.isDeleted = false")
在这里:
entityManager.setProperty("disableDeletedFeature", '1');