我现在做一个项目涉及到查询返回多个结果集的存储过程,我知道用JDBC可以用游标的方式,但是用Hiberanter该怎么处理就不知道了,请知道的兄弟帮解决一下!hibernate存储过程多个结果集

解决方案 »

  1.   

    只要配置好了hbm.xml文件
    那么返回给你的直接可以是一个list或者javaBean,这里面肯定就包括了你所需要的所有对象。
    hibernate就是对jdbc的封装,就等于通过配置文件对jdbc进行了一些功能的添加。
      

  2.   

    不是,可能我说的不太清楚,JDBC是可以处理的,但是我的存储过程是查询多个表,这些表可能来自不同的数据库,Hibernate是指取第一个结果集,其他的将被抛弃,我想问的是有没有解决方法,取到结果集(不用JDBC能不能解决)
      

  3.   

    因为我的项目用了Hibernate,如果再用JDBC感觉有点傻
      

  4.   

    hibernate调用存储过程你可以使用SQLQuery query = session.createSQLQuery("{Call proc(?)}");   
    query.setString(0, 参数);   
    List<Object[]> list =query.list(); //其实hibernate内容返回的list里面是Object[]
    //这个Object[]里面的每个元素就是你返回回来的每行的每个字段
      

  5.   

    你这个方法不行的,因为你这种方式返回的还是第一个结果集,比如我在存储过程里有两个查询:
    1,select * from user;
    2,select * from group;
    而user表和group可能来自两个不同的数据库;
    用qeuery.list();方法只能得到第一个查询的结果集,而第二个是得不到的;
    我知道用JDBC先取得第一个结果集,然后判断是否存在下一游标,如果有则可以取出,而Hibernate好像不支持这种方式。不知道有没有其他的方式处理
      

  6.   

    多个结果集,hibernate确实没提供支持,楼主只能通过jdbc方式了Connection connection=session.connection();
    //接下来用这个connection以jdbc方式去进行调用存储过程了
      

  7.   

    hibernate是ORM的框架主要处理数据与对象之间的映射关系,本身对存储过程的支持就很少了,再加之楼主这个多结果集.....
      

  8.   

    这个不用管,分布式了你系统自然就使用了分布式事务管理,session.connection();connection本身就是从事务管理器里面获取的,事务管理器会根据事务的上下文环境给当前的connection的
      

  9.   

    但是这个connection是通过session获得的,也就是从我们配置文件的dataSource获得的,这只能获取dataSource的connection啊 ,怎么还能连接到另一个dataSource呢
      

  10.   

    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}...]