¿Cómo puedo escribir una consulta de Hibernate Criteria para una superclase y verificar cierta subclase? Imaginemos que tenemos las siguientes clases todo planeado con Hibernate-JPA:¿Cómo puedo escribir una consulta de criterios de Hibernación para una súper clase y verificar cierta subclase?
@Entity
@Inheritance(strategy = InheritanceType.JOINED)
public class Bar {
@Id
@Column(name = "id")
private Long id;
}
@Entity
@PrimaryKeyJoinColumn(name="bar_id")
public class Foo extends Bar {
}
@Entity
@PrimaryKeyJoinColumn(name="bar_id")
public class Goo extends Bar {
}
Al escribir una consulta criterios como éste, me gustaría, por su rendimiento, utilizar una izquierda a unirse con la sub-clase:
getSession()
.createCriteria(Bar.class)
.createAlias("Foo", "foo", CriteriaSpecification.LEFT_JOIN)
.add(Restrictions.isNotNull("foo.bar_id"))
.list();
Esto falla, porque la ruta de asociación "Foo" no funciona, obviamente, pero ilustrará lo que quiero. ¿O hay otra forma de hacer este tipo de consulta? Necesito que la consulta se realice en la superclase. Si yo lo hubiera hecho en SQL que se vería así:
select b.*
from bar b left join foo f on f.bar_id = b.id
where f.bar_id is not null;
La consulta SQL anterior es sólo para ilustrar lo que quiero decir, sé que sería más fácil de usar un "normal" unirse en ese caso concreto .
Sí que sé sobre el Consulta SQL, fue solo para ilustrar el punto y aclarar la pregunta. Mi consulta es mucho más compleja IRL. Sin embargo, agregar una restricción para la propiedad de la clase funciona perfectamente. Muy lógico cuando lo piensas, gracias. – crunchdog
'Restrictions.eq (" bar.class ", Foo.class))' era lo que estaba buscando, ¡gracias! – jlb