2013-04-06 85 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'); 
相關問題