我有一个HQL查询,但它有很多where条件。所以我决定使用Hibernate标准。
这是我的查询:
select distinct u.employee.id,u.employee.name,u.employee.address.phone from user u.
我使用Criteria Project.property尝试了它。但它给出了一个错误。是否可以为此查询编写休眠条件?
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"));
List<User> users = (List<User>) dbSession.createCriteria(User.class)
.add(Restrictions.eq("nameOfFieldInUserClass", value))
.list();
"nameOfFieldInUserClass"是User中的限制字段的名称,而不是DB中的列名称。
对于不同的,您可以使用
setProjection(Projections.distinct(Projections.property("nameOfField")));