Sospendi i criteri di filtrazione globale
Domanda
Esiste un modo per aggiungere un singolo criterio a un livello di factory (configurazione) di sessione che verrà applicato a tutti entite recuperati con una Session? Abbiamo l'obbligo di non eliminare alcuna riga dal nostro database ma di "quot" " entità cancellate in quanto tali in modo tale da non partecipare a ulteriori operazioni.
So che possiamo semplicemente recuperare tutte le entità attraverso un'interfaccia comune (ad esempio un oggetto Dao di base comune), ma l'approccio con filtro globale sarebbe meno soggetto a errori in quanto non richiede la conoscenza dell'uso di questa interfaccia comune .
Soluzione
The Hibernate Documentation approfondisce un po 'di più . Sembra che il modo migliore per gestirlo sia con i filtri.
Per prima cosa, definisci un fitler in una classe o collezione in questo modo:
<filter-def name="IsDeletedFilter">
<filter-param name="IsDeleted" type="bool"/>
</filter-def>
Quindi lo allevi a una classe o a una raccolta:
<class/set ...>
...
<filter name="IsDeletedFilter" condition=":IsDeleted = Is_Deleted"/>
Purtroppo, devi farlo con ogni classe che desideri eliminare. Ma potresti essere in grado di mappare una classe base SoftDeleteEntity
e avere una tabella per gerarchia di sottoclassi.
Ho anche visto alcune persone affermare di poterlo fare con gli ascoltatori, anche se non so come.