hibernate将sql或hql查询结果集映射为实体类 不需要映射文件
2014-03-10 16:31
423 查看
感谢glamey兄弟的文章,正好解决了当前遇到的问题。原文链接如下:http://glamey.iteye.com/blog/721019
假设我们现在有一个DTO,其属性包括两张表的属性,我们现在需要将sql语句查询得到的内容转为一个DTO对象,其解决方法如下:
Java代码
String sql = "select u.userName as userName ,p.title as title ,p.addTime as addTime from user as u,post as p where u.id=p.userId"
Query q = factory.getCurrentSession().createSQLQuery(sql).setResultTransformer(Transformers.aliasToBean(PostVO.class));
上面select中as后面的内容必须和PostVO中属性名一致,这样就可以返回一个针对PostVO的一个集合。
其实大家可以看下hibernate这一部分的源码就会发现,主要是使用了AliasToBeanResultTransformer这个类,通过sql的查询,会返回数组,然后hibernate根据数据表的映射,自动帮我们来set对应的字段属性,所以标红的部分务必要跟VO中的属性值一直,要不然会报错的。
如果需要的话,大家也可以重写
4000
这个类。例如VOResultTransformer。然后在dao中更改成:
Java代码
setResultTransformer(new VOResultTransformer(PostVO.class));
另外,除了以上glamey的方法外,还有一种方法:
Java代码
Query q = session.createQuery("select new com.hibernate.MsgInfo(m.id, m.cont, m.topic.title, m.topic.category.name) from Msg m");
List<MsgInfo> list=q.list();
其中,MsgInfo是DTO。值得注意的是,第二种方法中DTO必须提供带参数的构造方法,并且HQL语句中属性的位置要与构造方法中的位置一一对应。
假设我们现在有一个DTO,其属性包括两张表的属性,我们现在需要将sql语句查询得到的内容转为一个DTO对象,其解决方法如下:
Java代码
String sql = "select u.userName as userName ,p.title as title ,p.addTime as addTime from user as u,post as p where u.id=p.userId"
Query q = factory.getCurrentSession().createSQLQuery(sql).setResultTransformer(Transformers.aliasToBean(PostVO.class));
上面select中as后面的内容必须和PostVO中属性名一致,这样就可以返回一个针对PostVO的一个集合。
其实大家可以看下hibernate这一部分的源码就会发现,主要是使用了AliasToBeanResultTransformer这个类,通过sql的查询,会返回数组,然后hibernate根据数据表的映射,自动帮我们来set对应的字段属性,所以标红的部分务必要跟VO中的属性值一直,要不然会报错的。
如果需要的话,大家也可以重写
4000
这个类。例如VOResultTransformer。然后在dao中更改成:
Java代码
setResultTransformer(new VOResultTransformer(PostVO.class));
另外,除了以上glamey的方法外,还有一种方法:
Java代码
Query q = session.createQuery("select new com.hibernate.MsgInfo(m.id, m.cont, m.topic.title, m.topic.category.name) from Msg m");
List<MsgInfo> list=q.list();
其中,MsgInfo是DTO。值得注意的是,第二种方法中DTO必须提供带参数的构造方法,并且HQL语句中属性的位置要与构造方法中的位置一一对应。
相关文章推荐
- 关于hibernate使用SQL查询,结果集无法映射到实体类上
- Hibernate3.1.3使用自定义实体类实现对SQL查询语句的映射
- 2012-12-14 16:38 hibernate 实体映射文件中 写 hql/sql 语句
- hibernate纯sql查询结果集映射为DTO(VO,DO)
- JPA项目使用myeclipse创建带注解的model实体类&web工程使用MyEclipse自动生成hibernate映射文件和实体类
- 神奇的Hibernate,表没有 主键,对应的映射文件就自动给我生成多了个实体类
- Hibernate合并查询结果集为实体类
- SQLserver数据库反编译生成Hibernate实体类和映射文件
- 用MyEclipse自动生成hibernate映射文件和实体类
- 使用HIBERNATE的SQL查询并将结果集自动转换成POJO
- 使用Hibernate5.0以上版本导致找不到实体类映射文件
- Hibernate 的三种查询方式:HQL、Criteria、Sql
- hibernate-查询总结、sql复习、HQL、criteria详解
- hibernate通过sql语句查询出的结果集封装到bean里面去
- Hibernate HQL与Native_SQL_查询_Query接口_iterate方法
- Hibernate插入、查询、删除操作 HQL or SQL
- Hibernate 的三种查询方式:HQL、Criteria、Sql
- Eclipse使用hibernate插件反向生成实体类和映射文件
- 根据Hibernate映射文件和实体类生成数据库
- 解决Hibernate原生SQL映射问题 - SQL查询出来的结果映射为值对象