2013-04-06 2 views

Antwort

6

Ja, es ist möglich, mit einer einfachen Problemumgehung. I angegebene @AdditionalCriteria Anmerkung wie folgt aus:

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

und eine Standardeigenschaft Wert für das Deaktivieren-Flag im persistence.xml angegeben:

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

so standardmäßig Filterung aktiviert ist, aber Sie können es deaktivieren leicht an der EntityManager Ebene wie folgt aus:

entityManager.setProperty("disableDeletedFeature", 1); 

es funktioniert für mich alles in Ordnung, hoffe, es hilft!

+1

ich es als Behelfslösung eher als eine empfohlene Lösung sehen, aber da ich es sehr ähnlich umgesetzt hatte (mit @AdditionalCriteria ("this.deleted =: SOFTDELETED")), akzeptiere ich diese Antwort. @James, ja, es gibt ein paar Diskussionen über die Implementierung von Native-Level-Unterstützung für das Eclipselink-Entwicklungs-Wiki (http://wiki.eclipse.org/Talk:EclipseLink/Development/AdditionalCriteria). – Kalle

+1

Danke Kristof und Kalle. Beide Lösungen funktionieren für PostgreSQL, aber: disableDeletedFeature = 1 funktioniert nicht für unsere Komponententests mit H2. Also habe ich @AdditionalCriteria verwendet ("this.blocked =: disableDeletedFeature ODER this.blocked = false") –

1

Wenn Sie eine native SQL-Abfrage verwenden, werden die Kriterien nicht angefügt.

Ansonsten gibt es keine einfache Möglichkeit, es wird angehängt zu deaktivieren, sofern Sie keine andere Persistenzeinheit oder eine andere Klasse ohne die zusätzlichen Kriterien erstellen.

Eine Sache, die Sie tun können eine ODER-Bedingung in den Kriterien auf einer Sitzung Eigenschaft basiert gesetzt wird, dann, wenn Sie diese Eigenschaft auf true gesetzt ist, können Sie die Kriterien deaktivieren.

Sie könnten eine Erweiterungsanforderung protokollieren, um eine Option hinzuzufügen, um sie nicht an eine Abfrage anzuhängen.

0

Ich benutze Eclipselink 2.4.1. Es funktioniert nur mit ANFüHRUNGSZEICHEN für einen Wert der Immobilie:

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

und hier:

entityManager.setProperty("disableDeletedFeature", '1');