论坛首页 Java企业应用论坛

Hibernate3调用存储过程用法 - [原创]

浏览 15974 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2006-09-23  
DB2中简单存储过程 selectAllUsers

CREATE  procedure selectAllUsers 
DYNAMIC RESULT SETS 1
BEGIN 
      DECLARE temp_cursor1 CURSOR  WITH RETURN TO CLIENT  FOR 
      SELECT * FROM  test;   
      OPEN temp_cursor1;
END;

映射文件中关于存储过程内容如下

<hibernate-mapping package="com.unmi.vo">
    <class name="Test" table="TEST">
     ............
    </class>

    <sql-query callable="true" name="selectAllUsers">
<return alias="aa" class="Test">
    <return-property name="oborqt" column="OBORQT"/>
    <return-property name="moorqt" column="MOORQT"/>
    <return-property name="roschn" column="ROSCHN"/>
    <return-property name="plandate" column="PLANDATE"/>
</return>
{ ? = call selectAllUsers() }
    </sql-query>
</hibernate-mapping>

{ ? = call selectAllUsers() } 也可以写成{ call selectAllUsers() },
如果有参数就写成
{ ? = call selectAllUsers(?,?,?) }
代码中对query设置相应位置上的值就OK

Java调用关键代码如下
      
  Session session = HibernateUtil.currentSession();
  Query query = session.getNamedQuery("selectAllUsers");
  List list = query.list();
  System.out.println(list);

要求你的存储过程必须能返回记录集,否则要出错
如果你的存储过程是完成非查询任务就应该在配置文件用以下三个标签
  <sql-insert callable="true">{call createPerson (?, ?)}</sql-insert>
  <sql-delete callable="true">{? = call deletePerson (?)}</sql-delete>
  <sql-update callable="true">{? = call updatePerson (?, ?)}</sql-update>

有一点不好的地方就是调用存储过程获取记录集时,不能对Query使用
setFirstResult(int)和setMaxResults(int)方法来分页
   发表时间:2006-09-24  
youlong05 写道

要求你的存储过程必须能返回记录集,否则要出错


上面这句话是关键。
0 请登录后投票
   发表时间:2006-09-28  
这样调用存储过程的方法不好,不如饶过hibiernateAPI来搞
0 请登录后投票
   发表时间:2006-10-11  
hawkzhan 写道
这样调用存储过程的方法不好,不如饶过hibiernateAPI来搞


这样做和命名查询很类似,我想知道为什么说不好?
0 请登录后投票
   发表时间:2007-05-28  
楼主能够成功运行吗?我看有问题吧。再有,如果有参数,如{?=call myfunction(?,?,?)},参数该如何输入?能否给个详细的java调用写法,而不要"代码中对query设置相应位置上的值就OK"一句话就带过。
0 请登录后投票
   发表时间:2007-05-28  
lljch 写道
楼主能够成功运行吗?我看有问题吧。再有,如果有参数,如{?=call myfunction(?,?,?)},参数该如何输入?能否给个详细的java调用写法,而不要"代码中对query设置相应位置上的值就OK"一句话就带过。



不错,找了个good point, 这个点上说得很草率。
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics