2010-05-10 13 views
6

Vorrei associare 2 entità utilizzando le annotazioni di ibernazione con una clausola di unione personalizzata. La clausola è sulla solita equità FK/PK, ma anche dove FK è nullo. In SQL questo sarebbe qualcosa di simile:Sospensione dell'abbonamento personalizzato sull'associazione

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

Da quello che ho letto dovrei usare l'annotazione @WhereJoinTable sull'entità proprietario, ma sono perplesso su come ho specificare questa condizione ... soprattutto la prima parte di esso - facendo riferimento all'ID dell'entità di adesione.

Qualcuno ha un esempio?

+0

Se b.a_id è null, allora appartiene a ogni oggetto che è un a? –

+0

sì tutti gli oggetti di 'a' avrebbero 'b' dove b.a_id è nullo – mysomic

risposta

18

Ecco un esempio che utilizza il paradigma padre/figlio standard che, a mio avviso, dovrebbe funzionare utilizzando l'annotazione di base @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

Esiste una soluzione simile per EclipseLink? – Huntro

+0

No, ma è possibile utilizzare DescriptorCustomizer http://wiki.eclipse.org/EclipseLink/Examples/JPA/MappingSelectionCriteria –

Problemi correlati