2013-04-06 88 views

回答

6

是的,这是可能的,一个简单的解决方法。我指定的@AdditionalCriteria注释是这样的:

@AdditionalCriteria(":disableDeletedFeature = 1 or this.isDeleted = false") 

并在persistence.xml禁用标志指定一个默认的属性值:

<property name="disableDeletedFeature" value="0"/> 

所以默认过滤功能,但你可以将其禁用在EntityManager级别很容易就可以这样:

entityManager.setProperty("disableDeletedFeature", 1); 

它对我来说都很好,希望它有帮助!

+1

我认为这是一个解决办法,而不是推荐的解决方案,但因为我有非常类似地实现它(使用@AdditionalCriteria(“this.deleted =:SOFTDELETED”)),我接受这个答案。 @James,是的,有一些关于在Eclipselink开发wiki上实现本地级支持的讨论(http://wiki.eclipse.org/Talk:EclipseLink/Development/AdditionalCriteria)。 – Kalle 2013-04-16 04:00:39

+1

谢谢Kristof和Kalle。两种解决方案都适用于PostgreSQL,但是:disableDeletedFeature = 1不适用于我们的H2单元测试。所以我用@AdditionalCriteria(“this.blocked =:disableDeletedFeature或this.blocked = false”) – 2017-11-30 11:53:13

1

如果使用本机SQL查询,则不会追加条件。

否则,除非您创建另一个持久性单元或没有附加条件的其他类,否则没有简单的方法禁用它被追加。

你可以做的一件事就是在基于会话属性的条件中放入一个OR条件,然后当你设置这个属性为true时,你可以禁用这个条件。

您可以登录增强请求以添加一个选项,而不将其附加到查询。

0

我使用eclipselink 2.4.1。它只用引号作品的属性值:

@AdditionalCriteria(":disableDeletedFeature = '1' or this.isDeleted = false") 

这里:

entityManager.setProperty("disableDeletedFeature", '1'); 
相关问题