projections inner example ejemplo consultas con java mysql hibernate hibernate-criteria

java - inner - Consulta de criterios de Hibernate para obtener columnas específicas



hibernate projections (2)

Estoy usando Criteria Query en mi código. Siempre dispara select * from ...

En cambio, quiero descuidar una columna (campo) de mi consulta, ya que ese campo tiene una gran cantidad de datos almacenados en bytes. Y eso causa problemas de rendimiento.

¿Alguien puede dar una idea para eso?

Alguna actualización

Agregué una proyección en mi consulta y creó una consulta como ...

select this_.TEMPLATE_ID as y0_, this_.TEMPLATE_NAME as y1_, this_.CREATE_DATE as y2_, this_.UPDATE_DATE as y3_, this_.STATUS_CODE as y4_, this_.USER_ID as y5_, this_.UPDATED_BY as y6_, this_.CATEGORY_ID as y7_, this_.PRACTICE_ID as y8_ from templates this_ inner join user user1_ on this_.USER_ID=user1_.USER_ID inner join template_categories category2_ on this_.CATEGORY_ID=category2_.CATEGORY_ID where y4_=? and y8_=? and y5_ in ( ?, ? ) order by y1_ asc limit ?

Y ahora el problema es como ... Unknown column ''y4_'' in ''where clause'' y el mismo error para y8_, y5_ significa que para todos los que estaban cerca dio un error.

Lo modifiqué a Query como ...

select this_.TEMPLATE_ID as y0_, this_.TEMPLATE_NAME as y1_, this_.CREATE_DATE as y2_, this_.UPDATE_DATE as y3_, this_.STATUS_CODE as y4_, this_.USER_ID as y5_, this_.UPDATED_BY as y6_, this_.CATEGORY_ID as y7_, this_.PRACTICE_ID as y8_ from templates this_ inner join user user1_ on this_.USER_ID=user1_.USER_ID inner join template_categories category2_ on this_.CATEGORY_ID=category2_.CATEGORY_ID where this_.STATUS_CODE=1 and this_.PRACTICE_ID=1 and this_.USER_ID in ( 1, 2 ) order by y1_ asc limit ?

Y funcionó. ¿Pero no sé cómo modificarlo en HQL?


Puede mapear otra entidad basada en esta clase (debe usar el nombre de la entidad para diferenciar las dos) y la segunda será una especie de dto (no olvide que dto tiene problemas de diseño ). debe definir el segundo como de solo lectura y darle un buen nombre para que quede claro que esta no es una entidad regular. por cierto, seleccionar solo algunas columnas se llama proyección, por lo que Google con ella será más fácil.

alternativa: puede crear una consulta con nombre con la lista de campos que necesita (ponerlos en la selección) o usar criterios con proyección


Use Projections para especificar qué columnas le gustaría devolver.

Ejemplo

Consulta SQL

SELECT user.id, user.name FROM user;

Alternativa de Hibernate

Criteria cr = session.createCriteria(User.class) .setProjection(Projections.projectionList() .add(Projections.property("id"), "id") .add(Projections.property("Name"), "Name")) .setResultTransformer(Transformers.aliasToBean(User.class)); List<User> list = cr.list();