2010-02-22 16 views
12

Ich habe ein Unternehmen, das mit @Where,Ignorieren Hibernate @Where Anmerkung

wie so
public class EntityA { 

    @OneToMany 
    @Where(...) 
    private List<EntityB> entityBList; 

} 

kommentierte eine Assoziation an ein anderes Unternehmen hat vor kurzem das Unvermeidliche passiert ist, ich brauche die Entität des laden, die nicht übereinstimmen die @ Where-Klausel. Ich könnte die @Where Annotation entfernen, aber sie wird oft verwendet, also möchte ich das im Idealfall nicht machen. Neben dem manuellen Laden der Liste von EntityBs mit einer anderen Abfrage, welche Optionen habe ich? Kann ich Hibernate anweisen, die @Where-Anmerkung zu ignorieren?

+0

ich es nicht bekommen: Sie brauchen die '@ Where' oder nicht? –

+1

Ich brauche es für 99% der Abfragen, aber es gibt eine, für die ich es nicht brauche. – Zecrates

Antwort

9

Nach vielen Untersuchungen scheint es, dass dies einfach unmöglich ist. Ich würde dringend empfehlen @Where zu vermeiden, da es schwer vorherzusagen ist, ob Sie jemals diese Assoziationen brauchen oder nicht.

5

Sie können eine andere Eigenschaft mit gleichen Daten wie diese Karte:

public class EntityA { 

    @OneToMany 
    @JoinColumn(name='theColumnName', insertable=false, updateable=false) 
    private List<EntityB> entityBListReadOnly; 

} 

So wichtig aktualisierbar falsch und einführbar falso setzen Konsistenzprobleme in Ihren Daten zu vermeiden!

6

Ich kenne sein eine alte Frage, aber falls jemand eine Antwort suchen ...
hatte ich das gleiche Dilemma, Sie wollen nicht, Ihren Code zu Chaos mit „is_deleted = false“ jeder, wo Sie wählen,

einfache Lösung stammt SQL verwenden:

lst = sessionFactory.getCurrentSession(). 
createSQLQuery("select {entb.*} from EntityB entb where is_deleted=1")        
      .addEntity("entb", EntityB.class) 
      .list();