Pregunta

Estoy intentando crear una consulta con criterios de hibernación para el siguiente escenario:

  • Dos entidades: indicador e informe (cada uno con sus propias tablas, clases, etc.)
  • un indicador se puede utilizar en cero para muchos informes
  • un informe usa cero para muchos indicadores
  • por lo tanto, tengo una tabla de intersección para almacenar la relación
  • la relación se define en ambas clases y sus asignaciones de hibernación
  • en la interfaz de usuario, el usuario puede seleccionar uno o varios informes (entre otras cosas), y me gustaría consultar el DB para los indicadores utilizados en estos informes

He intentado lo siguiente:

criteria.add(Restrictions.in("Reports", selectedReports));

pero todo lo que obtengo es una declaración SQL extraña con

where this_.Indicator_ID in (?)

y luego una excepción JDBC (parámetro faltante)

¿Alguna idea? Gracias.

Nota: he consultado Consultando muchas relaciones con el criterio de hibernación , Pero la solución aceptada es construir una cadena sql personalizada ...

¿Fue útil?

Solución

  Criteria c = session.createCriteria(Indicator.class);
    c.add(Restrictions.eq("someField", myObject).createCriteria("reports")
    .add(Restrictions.eq("reportName", name);
    c.list();

Es necesario crear un criterio secundario para la entidad que se mantiene en una colección en otra entidad.

String[] selectedReportsId = {"1", "2", "3"};
 c.add(Restrictions.eq("someField",myObject).createCriteria("reports")
    .add(Restrictions.in("id", selectedReportsId);

Luego echa un vistazo a la información sobre cómo transformar los resultados desde aquí: https: // docs. jboss.org/hibernate/orm/3.3/reference/en-US/html/querycriteria.html#querycriteria-associations

También esto puede arrojar algo de luz sobre lo que puede hacer con los criterios: http://www.hibernate.org/hib_docs/ v3 / api / org / hibernate / criterion / Restrictions.html

Otros consejos

Si es necesario, aquí hay un par de sugerencias con las que Google volvió después de buscar " hibernate hql many-to-many " ;:

http://patf.net /blogs/index.php?blog=2&c=1&more=1&pb=1&tb=1&title=many_to_many_in_hql

Y desde los foros de Hibernate:

http://forum.hibernate.org/viewtopicate.php? = 2340747 & amp; sid = d4c8d2fcc16aed0201f73eb74619692a

Y de los foros de primavera:

http://forum.springframework.org/showthread.php?t=36870

Espero que estos ayuden.

Por ahora, así es como funcionó (gracias a zmf).

Criteria subcrit = criteria.createCriteria("Reports");
Disjunction dis = Restrictions.disjunction();
for (Reports r : selectedReports) {
    dis.add(Restrictions.idEq(r.getID()));
}
subcrit.add(dis);

Esto es casi exactamente lo que sugirió zmf, todo lo que agregué fue la disyunción para construir los criterios de la Colección que se transmite.

Todo lo que queda por hacer es tratar de usar la colección directamente ...

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top