2009-10-06 6 views
3

J'utilise Hibernate (3.2) Critères pour interroger et me donner une exception lors de la conversion en liste.Requête Hibernate Criteria - Exception de cast de classe

S'il vous plaît voir mon code et exception ci-dessous:

List<Summary> summaryList; 
    Criteria criteria = session.createCriteria(Summary.class); 
    session.beginTransaction(); 
    summaryList = Criteria.setProjection(
     Projections.projectionList().add(Projections.sum("contractDollar")) 
     .add(Projections.groupProperty("department"))).list() ; 

exception: java.lang.ClassCastException: [Ljava.lang.Object; ne peut pas être jeté à com.abc.model.Summary

Je ne sais pas pourquoi le résultat est retourné comme « objet », même si je l'ai précisé que mon POJO (Résumé)

Pourriez-vous s'il vous plaît me aider . Je suis un débutant à hiberner.

Merci, Raja.

+0

Avez-vous spécifié ResultTransformer? –

Répondre

3

Est-ce que Summary est une entité mappée ou un bean que vous essayez de renvoyer dans vos résultats? Ça ne devrait pas être les deux. Vous devez transmettre une classe d'entité au session.createCriteria().

En ce qui concerne les résultats vont, vous devez:

  1. Vous avez déjà un setter approprié dans votre classe Résumé (ou votre grain de résultat si elle est différente).
  2. Spécifiez un alias pour votre projection.
  3. Spécifiez un transformateur de résultat 'aliasToBean'.

Votre code de critères deviendra:

summaryList = Criteria.setProjection(
Projections.projectionList() 
    .add(Projections.sum("contractDollar"), "contractSum") 
    .add(Projections.groupProperty("department")) 
) 
.setResultTransformer(Transformers.aliasToBean(Summary.class)) 
.list() ; 

Votre Summary haricot devra avoir une méthode setContractSum() dans cet exemple.

+0

Ancienne question mais cette ligne est dorée: '.setResultTransformer (Transformers.aliasToBean (Summary.class))' – cowls

2

Je ne suis pas sûr de ce que Summary est d'essayer, mais:

Criteria criteria = session.createCriteria(Summary.class); 
Transaction tx = session.beginTransaction(); 
summaryList = criteria.setProjection(
    Projections.projectionList().add(Projections.sum("contractDollar")) 
     .add(Projections.groupProperty("department"))).list() ; 

Object[] result = criteria.list().get(0); 
// result[0] holds the sum of contractDollar 

tx.commit(); 
Questions connexes