您的位置:首页 > 数据库

Hibernate查询结果转换为实体类型 (HQL/SQL)

2014-03-31 17:13 399 查看
 在使用Hibernate时,大部分情况使用HQL直接得到的就是实体了,但有时你或许要用到自定义实体的转换,可以参考如下

1.POJO实体

session.createSQLQuery(queryString.toString()).addEntity(实体.class);


2.普通JavaBean(非HibernatePOJO实体)

SQLQuery query = session.createSQLQuery("select vg189.gdname busiType,ob.tel busiNo,ob.order_number orderNo,ob.create_time ctime");
query.addScalar("busiType", Hibernate.STRING)
.addScalar("busiNo", Hibernate.STRING)
.addScalar("orderNo", Hibernate.STRING)
.addScalar("ctime", Hibernate.STRING);
query.setResultTransformer(Transformers.aliasToBean(实体.class));

return query.list();

注:示例中addScalar及setResultTransformer很关键,我在使用的时候还报了一个错(原因是在实体中需要有一个无参构造函数)

org.springframework.orm.hibernate3.HibernateSystemException: Could not instantiate resultclass: com.yysoft.ecss.eshop.webservice.imp.model.OrderMd; nested exception is org.hibernate.HibernateException: Could not instantiate resultclass: com.yysoft.ecss.eshop.webservice.imp.model.OrderMd
Caused by: org.hibernate.HibernateException: Could not instantiate resultclass: com.yysoft.ecss.eshop.webservice.imp.model.OrderMd
at org.hibernate.transform.AliasToBeanResultTransformer.transformTuple(AliasToBeanResultTransformer.java:69)
at org.hibernate.hql.HolderInstantiator.instantiate(HolderInstantiator.java:69)


3.返回多个实体

session.createSQLQuery("SELECT {cat.*}, {mother.*}  FROM CATS c, CATS m WHERE c.MOTHER_ID = c.ID")
.addEntity("cat", Cat.class)
.addEntity("mother", Cat.class)
{cat.*}中的cat,既为addEntity里面的cat名称。(本例来自网络)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  hibernate
相关文章推荐