2011-12-27 24 views
5

Tengo dos clases con un mapeo @OneToOne bidireccional entre ellas.Seleccionar entidad donde la asociación Hibernate OneToOne no está presente

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

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

Necesito escribir código para recuperar todas las instancias de B que no tienen una instancia de A asociada a ellas. También tengo que escribir una consulta similar para todos los A que no tienen B.

he intentado:

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

pero esto parece volver siempre nula. ¿Pensamientos?

Respuesta

9

esto debería funcionar, para ambos sentidos:

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

Trabajos. No pude entender por qué isNull estaba agregando el valor nulo a la propiedad incorrecta en mi consulta con OneToOne. – MattC

+1

Como 'Criteria.LEFT_JOIN' se ha deperciado ahora puede usar' criteria.createAlias ​​("b.a", "a", JoinType.LEFT_OUTER_JOIN); ' –

Cuestiones relacionadas