我是休眠的新手。我需要在休眠条件查询中执行select item.itemName, (item.Qty * item.Price)
作为项目商品的总价格。我试过了,
objCriteria = objSession.createCriteria(ItemVO.class, "IT")
.setProjection(Projections.projectionList()
.add(Projections.property("IT.name"), "itemName")
.add(Projections.sqlProjection("(QTY * cost)", new Float[] {"TotalCost"}, ( new Type[] {Hibernate.Float}))))
.setResultTransformer(Transformers.aliasToBean(ConsumableDTO.class));
但是我需要用HQL名称而不是直接sql查询列名称。如何实现呢?
最佳答案
不知道您是否仍然对此感兴趣,但是我相信您可以通过将'sum'关键字实际放在sqlProjection中来使它起作用。
您的查询将如下所示:
objCriteria = objSession.createCriteria(ItemVO.class, "IT")
.setProjection(Projections.projectionList()
.add(Projections.property("IT.name"), "itemName")
.add(Projections.sqlProjection("sum(QTY * cost)", new Float[] {"TotalCost"}, ( new Type[] {Hibernate.Float}))))
.setResultTransformer(Transformers.aliasToBean(ConsumableDTO.class));
这将导致为每个匹配项返回Object [],其名称在第一个数组元素中,而计算出的“ totalCost”在第二个数组元素中。