2009-07-20 4 views
2

Je suis nouveau à Hibernate. J'ai besoin d'effectuer select item.itemName, (item.Qty * item.Price) comme prix total à partir de l'élément Item 'dans la requête de critères Hibernate. J'ai essayé,Comment faire pour diviser (colonne1/colonne2) dans les projections de critères d'hibernation

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)); 

Mais j'ai besoin avec le nom HQL au lieu du nom de la colonne de requête sql directe. comment l'atteindre?

Répondre

2

Je ne sais pas si cela vous intéresse toujours, mais je crois que vous pouvez obtenir ce résultat en mettant le mot clé 'sum' dans votre sqlProjection.

Votre requête serait alors ressembler à:

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)); 

Cela devrait aboutir à retourner un objet [] pour chaque élément correspondant, avec le nom dans le premier élément de tableau, et calculée « totalCost » dans le seconde.

+1

Ce genre d'exemples avancés est difficile à trouver. –

Questions connexes