Cómo usar unirse en criterios de hibernación después de la situación
Pregunta
Tenemos dos tablas Familia y Miembro, la relación entre estos dos es Familia tiene un conjunto de miembros, pero el miembro no tiene ninguna relación familiar dentro.
Quería que el miembro usara dob y family para eso estoy usando los criterios de API de Hibernate pero no entiendo cómo escribir una consulta de unión ya que los miembros no tienen una instancia de Family con ella. Así que no puedo usar FetchMode. ¿Alguna otra forma de lograr esto?
gracias de antemano. - Ravi Nikam.
Solución 2
gracias chicos, he resuelto esto con uno de mis colegas como en
DetachedCriteria subquery = DetachedCriteria
.forClass(Family.class, "family")
.add(Expression.eq("family.id", family.getId()));
subquery.createAlias("members", "members")
.add(Restrictions.eqProperty("members.id", "m.id"))
.add(Expression.eq("members.DOB",Date));
subquery.setProjection(Property.forName("members.id"));
Criteria crit = session.createCriteria(Member.class, "m")
.add(Subqueries.propertyIn("m.id", subquery));
results = crit.list();
resultados tiene una lista de miembros que solicité.
Otros consejos
en lugar de intentar hacer
from Member m join m.family f where f.name = ?
que no es posible, podrías hacer exactamente lo contrario
select m from Family f join f.members m where f.name = ?
Lo sé, no es Criterios HQL, pero eso es con lo que soy más fluido. Debería ser trivial "traducir" este HQL a Criterios sin embargo.