Hibernate Criteria Query来获取特定的列

我在我的代码中使用条件查询。 它始终激发select * from ...

相反,我想忽略从我的查询一列(字段),因为该字段有大量的数据存储在字节。 这导致性能问题。

任何人都可以给出一个想法吗?


一些更新

我在我的查询中添加了一个投影,并创build了一个像…

 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 ? 

现在的问题就像.. Unknown column 'y4_' in 'where clause'和y8_的相同错误,y5_意味着所有closures的地方给出错误。

我修改它为查询像…

 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 ? 

它的工作。 但我不知道如何在HQL中修改它?

使用投影来指定您想要返回的列。

SQL查询

 SELECT user.id, user.name FROM user; 

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(); 

你可以映射另一个基于这个类的实体(你应该使用entity-name来区分这两个),第二个将是dto(别忘了dto有devise问题 )。 你应该把第二个定义为只读,并给它一个好名字,以明确这不是一个正规的实体。 顺便select只有几列被称为投影,所以谷歌与它会更容易。

替代方法 – 您可以使用您需要的字段列表(您将它们放在select中)或使用投影条件创build命名查询