2013-04-06 10 views

risposta

6

Sì, è possibile, con una soluzione facile. Ho specificato l'annotazione @AdditionalCriteria in questo modo:

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

e specificato un valore di proprietà di default per la bandiera disabilitazione nel persistence.xml:

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

in modo da filtro predefinito è abilitato ma è possibile disattivarla facilmente al livello EntityManager come questo:

entityManager.setProperty("disableDeletedFeature", 1); 

Funziona tutto bene per me, spero che aiuti!

+1

Lo vedo come una soluzione piuttosto che una soluzione consigliata, ma dato che avevo messo in atto molto simile (usando @AdditionalCriteria ("this.deleted =: SOFTDELETED")), accetto questa risposta. @ James, sì, alcuni parlano dell'implementazione del supporto a livello nativo per questo sul wiki di sviluppo di Eclipselink (http://wiki.eclipse.org/Talk:EclipseLink/Development/AdditionalCriteria). – Kalle

+1

Grazie Kristof e Kalle. Entrambe le soluzioni funzionano per me su PostgreSQL, ma: disableDeletedFeature = 1 non funziona per i nostri test unitari con H2. Così ho usato @AdditionalCriteria ("this.blocked =: disableDeletedFeature O this.blocked = false") –

1

Se si utilizza una query SQL nativa, i criteri non verranno aggiunti.

Altrimenti non esiste un modo semplice per disabilitarne l'aggiunta, a meno che non si crei un'altra unità di persistenza o un'altra classe senza i criteri aggiuntivi.

Una cosa che si potrebbe fare è inserire una condizione OR nei criteri basati su una proprietà di sessione, quindi quando si imposta questa proprietà su true, è possibile disabilitare i criteri.

È possibile registrare una richiesta di miglioramento per aggiungere un'opzione per non aggiungerla a una query.

0

Uso eclipselink 2.4.1. Funziona solo con VIRGOLETTA per un valore della proprietà:

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

e qui:

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