2011-12-27 11 views
5

Ho due classi con un bi-directional @OneToOne che mappano l'un l'altro.Seleziona l'entità in cui non è presente l'associazione Herternate OneToOne

Class A { 
@OneToOne(fetch = FetchType.Lazy, mappedBy="a") 
private B b; 
} 

Class B { 
@OneToOne(fetch = FetchType.Eager) 
private A a; 
} 

Ho bisogno di scrivere codice per recuperare tutte le istanze di B a cui non è associata un'istanza di A. Ho anche bisogno di scrivere una query simile per tutti A, che non hanno alcun B.

ho provato:

Criteria criteria = getSession().createCriteria(B.class) 
criteria.add(Restrictions.isNull("a") 

ma questo sembra tornare sempre null. Pensieri?

risposta

9

questo dovrebbe funzionare, per entrambe le direzioni:

Criteria criteria = session.createCriteria(B.class, "b"); 
criteria.createAlias("b.a", "a", Criteria.LEFT_JOIN); 
criteria.add(Restrictions.isNull("a.id")); 
+0

Opere. Non riuscivo a capire perché isNull stava aggiungendo il null alla proprietà sbagliata nella mia query con OneToOne. – MattC

+1

Dato che 'Criteria.LEFT_JOIN' è depotenziato ora puoi usare' criteria.createAlias ​​("b.a", "a", JoinType.LEFT_OUTER_JOIN); ' –

Problemi correlati