有没有办法在EclipseLink中禁用@AdditionalCriteria?

时间:2013-04-06 06:23:53

标签: eclipselink

例如,在EclipseLink中使用@AdditionalCriteria很容易过滤掉软删除的实体,但在执行特定查询之前有没有办法暂时禁用它?

3 个答案:

答案 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');