2010-05-10 11 views
5

Me gustaría tener una consulta combinada para dos clases persistentes.API de criterios de Hibernate equivalente a la cláusula de selección HQL?

En HQL esto podría lograrse mediante la cláusula select,

select new Family(mother, mate, offspr) 
    from DomesticCat as mother 
     join mother.mate as mate 
     left join mother.kittens as offspr 

En el ejemplo anterior, la familia es una clase conbined con DemesticCat como su Construtor params

Cuál es el criterio equivalente del HQL seleccionar cláusula?

Respuesta

5

Tendrás que usar un ResultTransformer para esto. La entrada en el blog Hibernate 3.2: Transformers for HQL and SQL da el siguiente ejemplo (donde StudentDTO es una no-entidad Bean):

List resultWithAliasedBean = s.createCriteria(Enrolment.class) 
    .createAlias("student", "st").createAlias("course", "co") 
    .setProjection(Projections.projectionList() 
        .add(Projections.property("st.name"), "studentName") 
        .add(Projections.property("co.description"), "courseDescription") 
     ) 
      .setResultTransformer(Transformers.aliasToBean(StudentDTO.class)) 
      .list(); 

StudentDTO dto = (StudentDTO)resultWithAliasedBean.get(0); 
+0

¡Muchas gracias! ¡Eso es exactamente lo que estaba buscando! Parece que Criteria es casi tan poderoso como HQL. Gracias! –

1

En la API de Criterios, esta funcionalidad es manejada por Projections. La documentación es un poco confusa y complicada, pero eso es lo que necesita observar.

+0

skaffman: gracias por su respuesta rápida. acabo informé a la parte Proyecciones, y se encontró que PropProjection.Property.forName ("nombre") podría usarse para filtrar un subconjunto de columnas como resultado, pero no pude encontrar una proyección que se asigna dos Persistencia clases en una nueva clase, como la clase familiar en el ejemplo anterior? ¿Podría arrojar algo de luz sobre eso? –

Cuestiones relacionadas