2 回答
TA贡献1876条经验 获得超6个赞
您的问题不是很清楚,尤其是在您尝试使用的地方,Restrictions.eq("EntityTwo", EntityTwo)因为这样不会给出正确的结果。但是,Hibernate提供了EntityOne一种从使用HibernateTransformers类选择的列中作为对象返回的方法。对于您的情况,您将需要使用要getter setter返回的列编写一个自定义类。请注意,变量的名称必须与别名列完全一样,这一点很重要。
由于您的示例不清楚,所以让我用一个简单的示例进行说明:假设我需要OrderAmount按OrderDate和分组的所有购买OrderNumber
public static List<YourCustomEntity> getAggregateOrders(){
Session session = HibernateUtil.getSessionFactory().openSession();
Transaction tx = null;
List<YourCustomEntity> list = new ArrayList<YourCustomEntity>();
try {
tx = session.beginTransaction();
Criteria cr = session.createCriteria(PurchaseOrders.class);
cr.setProjection(Projections.projectionList()
.add(Projections.sum("orderAmount").as("sumOrderAmount"))
.add(Projections.groupProperty("orderNumber").as("agOrderNumber"))
.add(Projections.groupProperty("orderDate").as("agOrderDate")));
cr.setResultTransformer(Transformers.aliasToBean(YourCustomEntity.class));
list = (List<YourCustomEntity>) cr.list();
}catch (Exception asd) {
System.out.println(asd.getMessage());
if (tx != null) {
tx.rollback();
}
} finally {
session.close();
}
return list;
}
在这方面,您将需要您的customEntity具有上面返回的三列。例如:
public class YourCustomEntity {
private double sumOrderAmount;
private String agOrderNumber;
private Date agOrderDate;
//And then the getters and setters
注意:请注意,变量的命名与列别名相同。
TA贡献1794条经验 获得超7个赞
你应该用 Projections.groupProperty(propertyName);
criteria.setProjection(Projections.groupProperty("propertyName"));
添加回答
举报