2008-09-26 9 views
2

Gibt es eine Möglichkeit, ein einzelnes Kriterium auf einer Sitzung Fabrik (Konfiguration) Ebene, die für alle entitys releived mit einer Sitzung gelten? Wir haben die Anforderung, keine Zeilen aus unserer Datenbank zu löschen, sondern gelöschte Entitäten als solche zu "markieren", damit sie nicht an weiteren Operationen teilnehmen.Hibernate globale Filtration Creteria

Ich weiß, dass wir nur durch eine gemeinsame Schnittstelle (zB ein gemeinsames Basis-Dao-Objekt) alle Entitäten retriven können, aber der Ansatz mit globaler Filterung wäre weniger fehleranfällig, da er nicht das Wissen benötigt Schnittstelle.

Antwort

2

The Hibernate Documentation führt dies ein wenig mehr aus. Es sieht so aus, als ob der beste Weg, dies zu handhaben, mit Filtern ist.

Zunächst definieren Sie eine fitler auf eine Klasse oder eine Sammlung wie folgt:

<filter-def name="IsDeletedFilter"> 
    <filter-param name="IsDeleted" type="bool"/> 
</filter-def> 

Dann Sie es zu einer Klasse oder Sammlung anhängen:

<class/set ...> 
... 
<filter name="IsDeletedFilter" condition=":IsDeleted = Is_Deleted"/> 

Ach, müssen Sie Mach das mit jeder Klasse, die du löschen willst. Aber Sie können möglicherweise eine Basisklasse SoftDeleteEntity abbilden und eine Tabelle pro Unterklassenhierarchie haben.

Ich habe auch einige Leute gesehen, die behaupten, dies mit Zuhörern tun zu können, obwohl ich nicht weiß, wie.