Hibernate执行返回多个结果集的存储过程 我现在做一个项目涉及到查询返回多个结果集的存储过程,我知道用JDBC可以用游标的方式,但是用Hiberanter该怎么处理就不知道了,请知道的兄弟帮解决一下!hibernate存储过程多个结果集 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 只要配置好了hbm.xml文件那么返回给你的直接可以是一个list或者javaBean,这里面肯定就包括了你所需要的所有对象。hibernate就是对jdbc的封装,就等于通过配置文件对jdbc进行了一些功能的添加。 不是,可能我说的不太清楚,JDBC是可以处理的,但是我的存储过程是查询多个表,这些表可能来自不同的数据库,Hibernate是指取第一个结果集,其他的将被抛弃,我想问的是有没有解决方法,取到结果集(不用JDBC能不能解决) 因为我的项目用了Hibernate,如果再用JDBC感觉有点傻 hibernate调用存储过程你可以使用SQLQuery query = session.createSQLQuery("{Call proc(?)}"); query.setString(0, 参数); List<Object[]> list =query.list(); //其实hibernate内容返回的list里面是Object[]//这个Object[]里面的每个元素就是你返回回来的每行的每个字段 你这个方法不行的,因为你这种方式返回的还是第一个结果集,比如我在存储过程里有两个查询:1,select * from user;2,select * from group;而user表和group可能来自两个不同的数据库;用qeuery.list();方法只能得到第一个查询的结果集,而第二个是得不到的;我知道用JDBC先取得第一个结果集,然后判断是否存在下一游标,如果有则可以取出,而Hibernate好像不支持这种方式。不知道有没有其他的方式处理 多个结果集,hibernate确实没提供支持,楼主只能通过jdbc方式了Connection connection=session.connection();//接下来用这个connection以jdbc方式去进行调用存储过程了 hibernate是ORM的框架主要处理数据与对象之间的映射关系,本身对存储过程的支持就很少了,再加之楼主这个多结果集..... 这个不用管,分布式了你系统自然就使用了分布式事务管理,session.connection();connection本身就是从事务管理器里面获取的,事务管理器会根据事务的上下文环境给当前的connection的 但是这个connection是通过session获得的,也就是从我们配置文件的dataSource获得的,这只能获取dataSource的connection啊 ,怎么还能连接到另一个dataSource呢 List l = this.getSession().createSQLQuery(" { Call p_tztj(?,?,?,?) }") .addScalar("mc_1",Hibernate.STRING) //列名 .addScalar("mc_2",Hibernate.STRING) .addScalar("mc_3",Hibernate.STRING) .setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP) .setParameter(0, "")//参数 .setParameter(1, "") .setParameter(2, "") .setParameter(3, "") .list(); 返回的结果:[{mc_1=164, mc_2=14, mc_3=7},{mc_1=164, mc_2=14, mc_3=7},{mc_1=164, mc_2=14, mc_3=7}...] 求助:静态变量问题 【求助】struts2+json action获取不到值 hibernate 使用异常 HQL中cast的使用 求助怎么配置J2EE(不够再加) 各位老大,有什么好的关于socket通讯方面的书籍推荐一下 好消息,快出Struts的中文书啦! struts中对数据库操作的问题 关于多国语言source文件的处理(struts开发) JDK代理和CGLiB代理的一些问题 java mail 发送邮件错误,javax.mail.AuthenticationFailedException: failed to connect ssh
那么返回给你的直接可以是一个list或者javaBean,这里面肯定就包括了你所需要的所有对象。
hibernate就是对jdbc的封装,就等于通过配置文件对jdbc进行了一些功能的添加。
query.setString(0, 参数);
List<Object[]> list =query.list(); //其实hibernate内容返回的list里面是Object[]
//这个Object[]里面的每个元素就是你返回回来的每行的每个字段
1,select * from user;
2,select * from group;
而user表和group可能来自两个不同的数据库;
用qeuery.list();方法只能得到第一个查询的结果集,而第二个是得不到的;
我知道用JDBC先取得第一个结果集,然后判断是否存在下一游标,如果有则可以取出,而Hibernate好像不支持这种方式。不知道有没有其他的方式处理
//接下来用这个connection以jdbc方式去进行调用存储过程了
.addScalar("mc_1",Hibernate.STRING) //列名
.addScalar("mc_2",Hibernate.STRING)
.addScalar("mc_3",Hibernate.STRING)
.setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP)
.setParameter(0, "")//参数
.setParameter(1, "")
.setParameter(2, "")
.setParameter(3, "")
.list();
返回的结果:
[{mc_1=164, mc_2=14, mc_3=7},{mc_1=164, mc_2=14, mc_3=7},{mc_1=164, mc_2=14, mc_3=7}...]