我正在使用Hibernate(3.2)Criteria进行查询,并在转换为列表时给出异常。
请参阅下面的代码和例外:
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() ;
异常: java.lang.ClassCastException:[Ljava.lang.Object;无法转换为com.abc.model.Summary
我不确定为什么结果会以“对象”的形式返回,即使我将其指定为我的pojo(摘要)
你可以帮我解决这个问题。我是一个休眠的新手。谢谢, 拉加。
答案 0 :(得分:3)
Summary
是您尝试在结果中返回的映射实体还是bean?它不应该是两者兼而有之。您需要将实体类传递给session.createCriteria()
。
就结果而言,你需要:
您的标准代码将变为:
summaryList = Criteria.setProjection(
Projections.projectionList()
.add(Projections.sum("contractDollar"), "contractSum")
.add(Projections.groupProperty("department"))
)
.setResultTransformer(Transformers.aliasToBean(Summary.class))
.list() ;
在此示例中,您的Summary
bean需要setContractSum()
方法。
答案 1 :(得分:2)
我不确定Summary
是什么,但请尝试:
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();