我是休眠的新手。我需要在休眠条件查询中执行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”在第二个数组元素中。

10-04 10:40