浏览 15983 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2006-09-23
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)方法来分页 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2006-09-24
youlong05 写道 要求你的存储过程必须能返回记录集,否则要出错 上面这句话是关键。 |
|
返回顶楼 | |
发表时间:2006-09-28
这样调用存储过程的方法不好,不如饶过hibiernateAPI来搞
|
|
返回顶楼 | |
发表时间:2006-10-11
hawkzhan 写道 这样调用存储过程的方法不好,不如饶过hibiernateAPI来搞
这样做和命名查询很类似,我想知道为什么说不好? |
|
返回顶楼 | |
发表时间:2007-05-28
楼主能够成功运行吗?我看有问题吧。再有,如果有参数,如{?=call myfunction(?,?,?)},参数该如何输入?能否给个详细的java调用写法,而不要"代码中对query设置相应位置上的值就OK"一句话就带过。
|
|
返回顶楼 | |
发表时间:2007-05-28
lljch 写道 楼主能够成功运行吗?我看有问题吧。再有,如果有参数,如{?=call myfunction(?,?,?)},参数该如何输入?能否给个详细的java调用写法,而不要"代码中对query设置相应位置上的值就OK"一句话就带过。
不错,找了个good point, 这个点上说得很草率。 |
|
返回顶楼 | |