如何在hibernate标准投影中进行分割(第1列/第2列)

如何在hibernate标准投影中进行分割(第1列/第2列),hibernate,Hibernate,我刚开始冬眠。在Hibernate条件查询中,我需要执行选择item.itemName,(item.Qty*item.Price)作为项目的总价。我试过了 objCriteria = objSession.createCriteria(ItemVO.class, "IT") .setProjection(Projections.projectionList() .add(Projections.property("IT.name"), "itemName") .add(Projections.s

我刚开始冬眠。在Hibernate条件查询中,我需要执行
选择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查询列名。如何实现它?

不确定您是否仍然对此感兴趣,但我相信您可以通过在sqlProjection中实际添加“sum”关键字来实现这一点

您的查询将如下所示:

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”。

这种高级示例很难获得。