2010-05-10 2 views
6

Ich möchte 2 Entitäten mit Hibernate Annotationen mit einer benutzerdefinierten Join-Klausel verknüpfen. Die Klausel ist auf der üblichen FK/PK-Gleichheit, aber auch dort, wo der FK Null ist. In SQL sein, dies wäre so etwas wie:Hibernate benutzerdefinierte Join-Klausel auf Verknüpfung

join b on a.id = b.a_id or b.a_id is null 

Von dem, was ich gelesen habe, sollte ich die @WhereJoinTable Anmerkung auf den Eigentümer Einheit verwenden, aber ich bin verwirrt darüber, wie ich diesen Zustand angeben ... vor allem der erste Teil davon - bezogen auf die ID der fusionierenden Entität.

Hat jemand ein Beispiel?

+0

Wenn b.a_id null ist, gehört es zu jedem Objekt, das ein a ist? –

+0

ja alle Objekte von 'a' hätten 'b' wo b.a_id null ist – mysomic

Antwort

18

Hier ist ein Beispiel, das das Standard Parent/Child-Paradigma verwendet, das meiner Meinung nach mit der einfachen @Where-Annotation funktionieren sollte.

public class A { 
    ... 
    @ManyToOne(fetch = FetchType.EAGER) // EAGER forces outer join 
    @JoinColumn(name = "a_id") 
    @Where(clause = "a_id = id or a_id is null") // "id" is A's PK... modify as needed 
    public B getB() { return b; } 

} 

public class B { 
    ... 
    @OneToMany(mappedBy = "b") 
    public List<A> getA() { return a; } 
} 
+0

Gibt es eine ähnliche Lösung für EclipseLink? – Huntro

+0

Nein, aber Sie können DescriptorCustomizer http://wiki.eclipse.org/EclipseLink/Examples/JPA/MappingSelectionCriteria verwenden –

Verwandte Themen