2016-05-16 11 views
0

Guten Tag,Hibernate Annotation Wo nur für 1 zu viele Beziehung gelten?

Ich habe einen Anruf Entity-Datei Agroup.java, und ich verknüpfen Anruf an einen anderen Tisch Bservice.java, die 1 bis Beziehung ist. So codieren ich es wie folgt:

@OneToMany(cascade = { CascadeType.PERSIST, CascadeType.MERGE }, mappedBy = "Agroup") 
    @Where(clause = "deleted = 0") 
    public Set< Bservice> getBServices() { 
     return BServices; 
    } 

Und in der Hibernate-Abfrage, fand ich, dass es in der deleted = 0 Zustand hinzufügen.

left outer join Bservice b on a.groupId = b.groupId AND (b.deleted = 0)" 

Das funktioniert gut.

Allerdings habe ich einen anderen Ansatz, der auf 1-Beziehung Viele ist, die Bservice.java Link zu Cservice.java ist, dass ich es wie folgt Code:

@ManyToOne() 
    @JoinColumn(name = "serviceId", nullable = false) 
    @Where(clause = "deleted = 0") 
    public Cservice getCService() { 
     return CService; 
    } 

Dieses nur die 2 Tisch sitzen, aber nicht in der WHERE-Bedingung hinzugefügt.

left outer join Cservice c on b.serviceId = c.serviceId 

Ist es Hibernate Annotation Wo gilt nur für 1 zu viele Beziehung?

Bitte beraten.

Antwort

0

Es hängt alles von Ihrer Hibernate-Version ab. Die kurze Antwort auf Ihre Frage lautet: Nein. Die @Where Annotation kann für OneToOne und ManyToOne Beziehungen verwendet werden.

Abhängig von Ihrer Hibernate-Version wird die SQL mit der "Where" -Klausel außerhalb Ihrer linken Outer-Join-Klausel generiert. Etwas wie folgt aus:

... linke äußere Verknüpfung CService c auf b.serviceId = c.serviceId WHERE b.deleted = 0

Statt:

linken Außen bService b kommen auf a.groupId = b.groupId AND (b.deleted = 0)

einen Blick auf diesen Link haben Sie aus das Hibernate-Team: https://hibernate.atlassian.net/browse/HHH-9084

Von der offiziellen Dokumentation: https://docs.jboss.org/hibernate/stable/annotations/reference/en/html/entity.html#entity-mapping-association

Es ist möglich,

zu setzen -> die where-Klausel, mit @Where (auf der Zieleinheit angewandt wird) oder @WhereJoinTable (auf die Zuordnungstabelle angewendet)

+0

Danke. Gute Kenntnisse teilen @Bruno Franco. Ich habe gerade mein sql überprüft, das SQL, das nicht mit der "Wo" -Klausel erzeugt wurde, outisde meine linke äußere Verbindung Klausel. Die "Where" Funktion ist einfach weg. Hast du eine Ahnung davon? Ist es Ursache, indem ich 'mappedBy' im ersten Fall und' JoinColumn' zweiten Fall verwende? –