使用Hibernate Criteria投影限制选定的字段

时间:2015-01-12 09:02:57

标签: java hibernate hibernate-criteria

我有一个HQL查询,但它有很多条件。所以我决定使用Hibernate Criteria。

这是我的问题:

select distinct u.employee.id,u.employee.name,u.employee.address.phone from user u.

我使用Criteria Project.property尝试了它。但它给出了一个错误。是否可以为此查询编写Hibernate Criteria?

2 个答案:

答案 0 :(得分:2)

Criteria cr = session.createCriteria(User.class)
    .setProjection(Projections.projectionList()
      .add(Projections.property("employee.id"), "id")
      .add(Projections.property("employee.name"), "Name"));

  List<User> list = cr.list();

更多例子。

Criteria cr = session.createCriteria(Employee.class);

//获取总行数。

cr.setProjection(Projections.rowCount());

//获得一个属性的平均值。

cr.setProjection(Projections.avg("salary"));

//获取属性的不同计数。

cr.setProjection(Projections.countDistinct("firstName"));

//获得最大的财产。

cr.setProjection(Projections.max("salary"));

//获得最少的财产。

cr.setProjection(Projections.min("salary"));

//获取属性的总和。

cr.setProjection(Projections.sum("salary"));

答案 1 :(得分:1)

List<User> users = (List<User>) dbSession.createCriteria(User.class)
          .add(Restrictions.eq("nameOfFieldInUserClass", value))                
          .list();

“nameOfFieldInUserClass”是User中的限制字段名称,不是DB中列的名称

并且为了与众不同,您可以使用

setProjection(Projections.distinct(Projections.property("nameOfField")));