2010-05-10 14 views
6

Chciałbym skojarzyć 2 podmioty przy użyciu adnotacje hibernacji z niestandardowej klauzuli join. Klauzula jest na zwykłej równości FK/PK, ale także tam, gdzie FK jest zerowa. W SQL byłoby to coś takiego:Hibernate niestandardowe klauzula sprzężenia na skojarzenie

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

Z tego co czytałem należy używać @WhereJoinTable adnotacji na jednostkę właściciela, ale jestem zaskoczony, jak określić ten stan ... zwłaszcza pierwsza część z tego - odnosząc się do identyfikatora łączącego się podmiotu.

Czy ktoś ma przykład?

+0

Jeśli b.a_id ma wartość null, należy do każdego obiektu, który jest a. –

+0

Tak, wszystkie obiekty "a" miałyby "b", gdzie b.a_id jest pusty – mysomic

Odpowiedz

18

Oto przykład korzystający ze standardowego paradygmatu rodzic/dziecko, który według mnie powinien działać przy użyciu podstawowej adnotacji @Where.

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

Czy istnieje podobne rozwiązanie dla EclipseLink? – Huntro

+0

Nie, ale można użyć DescriptorCustomizer http://wiki.eclipse.org/EclipseLink/Examples/JPA/MappingSelectionCriteria –

Powiązane problemy