2011-08-30 11 views
6

Ho il seguente one-to-one relazione a Hibernate (che potrebbe essere null):HQL con assegno Null per l'one-to-one rapporto

<one-to-one name="details" class="com.example.Details" lazy="false" cascade="all"/> 

sto cercando di selezionare tutte le entità che hanno non dettagli -null con HQL:

from Entity e where e.details is not null 

ma questo restituisce tutte le entità, non importa se i dettagli sono nulli o no.

Quale sarebbe quindi un HQL corretto?

risposta

5

Ok ho trovato la soluzione:

select e from Entity e join e.details d where d is not null 
+0

Per il mio caso, ho trovato che ho solo bisogno di questo: selezionare e da Entity e join e.details Perché genererà un "inner join" in SQL, e non restituirà risultati se non ci sono dettagli. –

1

Supponiamo che questa relazione uno-a-uno faccia parte della mappatura della tabella herpderp, quindi l'entità herpderp ha la proprietà details.

Vuoi dire che la query restituisce quei record di herpderp in cui il campo herpderp.details è nullo?

O intendi qualcosa del genere?

from Entity e where e.details.someDetailsField is not null 
+0

intendo 'restituisce i record in cui il campo herpderp herpderp.details è null'. Il tuo HQL funziona, ma il problema è che tutti i campi nei dettagli possono essere nulli, quindi non posso davvero fare affidamento su di essi. Se provo a controllare l'indice primario: 'e.details.id non è nullo', restituisce nuovamente tutto (che è molto strano). – serg

1

si può anche molto probabilmente utilizzare la funzione elements HQL.

Dalla sezione Espressioni di HQL 3.3 Documentation

from Cat cat where exists elements(cat.kittens) 

che si dovrebbe tradurre alla query come

Select Entity e where exists elements(e.details)