关于hibernate的session.createSQLQuery(sql)直接调用底层SQL后,返回结果集的问题。

lgmsyy 2014-02-23 04:50:12

数据库中有如下信息

name,sex
张三、男
李四、女

通过Hibernate的 createSQLQuery 可以直接调用底层SQL语句
如下:

List list = (List)getHibernateTemplate().execute(new HibernateCallback(){
public Object doInHibernate(Session session) throws HibernateException,SQLException {

Query query = session.createSQLQuery(sql);//底层SQL

return query.list();
}
});

如果通过这种方式,我需要将结果集取出来,然后再遍历一边以便封装到对象中。如下

List<Person> newList = new ArrayList<Person>();

//再次遍历,以便封装对象到List<Person>

for(int i=0;i<list.size();i++){
Object[] tempBean=(Object[])list.get(i);
Person wp = new Person();
wp.setName((String)tempBean[0]);
wp.setSex((String)tempBean[1]);
newList.add(wp);
}


请问能有什么办法,我得到list集合后,直接就转成List<Person>对象集合了,而不需要中间的
再次遍历过程
...全文
581 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
简单过滤的就用addScalar方法,不然就用json之类的工具再转下,有过滤字段的方法。
lgmsyy 2014-02-24
  • 打赏
  • 举报
回复
引用 7 楼 fangmingshijie 的回复:
都查出来,需要啥取啥,哪有那么复杂的问题。
这个确实可以,我试验了。但是,正如我8楼说的,还有,如果表中的字段非常多,但业务中并不需要将所有字段都列出来,就会有问题的。
lgmsyy 2014-02-24
  • 打赏
  • 举报
回复
引用 7 楼 fangmingshijie 的回复:
都查出来,需要啥取啥,哪有那么复杂的问题。
所有字段都查出来啊,这个感觉不好,因为某个表中有clob ,bloc大字段,但我们不需要将他们也通过这个语句查出来啊,这样挺耗时的。
  • 打赏
  • 举报
回复
都查出来,需要啥取啥,哪有那么复杂的问题。
lgmsyy 2014-02-24
  • 打赏
  • 举报
回复
引用 5 楼 fangmingshijie 的回复:
多表查询也没问题,比如select a.*,b.* from Person a,student b,语句这样 session.createSQLQuery(sql).addEntity("a",Person.class).addEntity("b",Student.class)
select a.*,b.* from Person a,student b 是没有问题,但是 select a.name,a.class,b.name,b.sex from Person a,student b,如果这么写就有问题。 是不是还需要做个DOMAIN和相应的XML,那XML对应的表如何配置呢。
  • 打赏
  • 举报
回复
多表查询也没问题,比如select a.*,b.* from Person a,student b,语句这样 session.createSQLQuery(sql).addEntity("a",Person.class).addEntity("b",Student.class)
teemai 2014-02-24
  • 打赏
  • 举报
回复
引用 3 楼 lgmsyy 的回复:
[quote=引用 1 楼 fangmingshijie 的回复:] session.createSQLQuery(sql).addEntity(Person.class)
这个是没问题,但是我的SQL如果是多表查询呢。这个就不适用了啊。我倒是可以做个Person模型,里面封装各个表中需要提取的数据。但是在.hbm.xml却配置不了对应的多个表啊。当然,我可以写个视图,但是现在我不希望用视图的方式解决。[/quote] 复合的不行。要么定义新的表,配置hbm.xml
lgmsyy 2014-02-24
  • 打赏
  • 举报
回复
引用 1 楼 fangmingshijie 的回复:
session.createSQLQuery(sql).addEntity(Person.class)
这个是没问题,但是我的SQL如果是多表查询呢。这个就不适用了啊。我倒是可以做个Person模型,里面封装各个表中需要提取的数据。但是在.hbm.xml却配置不了对应的多个表啊。当然,我可以写个视图,但是现在我不希望用视图的方式解决。
  • 打赏
  • 举报
回复
session.createSQLQuery(sql).addEntity(Person.class)

62,635

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧