`

Hibernate3.2版本对于存储过程调用的问题

阅读更多

最近看了hibernate3.2支持在hbm.xml文件通过<sql-query> 配置就可以进行存储过程的调用,于是便做了相关的实验

-- Create table
create table T_TEST
(
  ID   NUMBER not null,
  NAME VARCHAR2(30),
  SEX  VARCHAR2(30),
  AGE  NUMBER
)

 

而后是hbm.xml文件

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!--
    Mapping file autogenerated by MyEclipse Persistence Tools
-->
<hibernate-mapping>
    <class name="test.Test" table="t_test" schema="HBM">
        <id name="id" column="id" type="int">
            <generator class="assigned"/>
        </id>
        <property name="name" column="name" type="string"></property>
        <property name="age" column="age" type="integer"></property>
        <property name="sex" column="sex" type="string"></property>
    </class>
   
    <sql-query name="getTestList" callable="true">    <!-- function -->
        <return alias="Test" class="test.Test">
            <return-property name="id" column="id"></return-property>
            <return-property name="name" column="name"></return-property>
            <return-property name="age" column="age"></return-property>
            <return-property name="sex" column="sex"></return-property>
        </return>
        {? = call getTestList(?)} --这个是函数的调用
    </sql-query>
     <sql-query name="cjjtlg" callable="true">    <!-- procedure -->
        <return alias="TTest" class="test.Test">
            <return-property name="id" column="id"></return-property>
            <return-property name="name" column="name"></return-property>
            <return-property name="age" column="age"></return-property>
            <return-property name="sex" column="sex"></return-property>
        </return>
        {call cjjtlg(?,?) }- -存储过程的调用 ,这里如果写成帮助文档里面{?=call cjjtlg(?,?) } 那必然是报告错误。
    </sql-query>
   
    <sql-query name="singleout" callable="true">    <!-- procedure -->
        <return alias="TTest" class="test.Test">
            <return-property name="name" column="name"></return-property>
        </return>
        {call singleout(?,?) }--带输出参数的调用
    </sql-query>
</hibernate-mapping>

 

 

 

Session session = HibernateSessionFactory.getSession();

Query query = session.getNamedQuery("cjjtlg");
query.setInteger(0, 1);

List<Test> list = query.list();
        for (int i = 0; i < list.size(); i++) {
            final Test t = list.get(i);
            System.err.println("id:" + t.getId() + ", name:" + t.getName()
                    + ", age:" + t.getAge() + ", sex:" + t.getSex());
        }
        System.err.println("count :" + list.size());
        System.err.println("----------finish----------\n");

 

对于存储过程的调用对于内嵌sql-query 这里面的,那么存储过程第一个参数必须是一个结果结,且必须是一个输出参数

那么才可以使用,特别注意到时候在进行query设置的时候参数忽略第一个参数,序列号从0开始,好比query.setInteger(0, 1);如此

存储过程如下

create or replace procedure cjjtlg(st_cursor out SYS_REFCURSOR,rowsid integer) is
begin
     open st_cursor for select * from t_test t where t.id=rowsid;
end cjjtlg;

query.setInteger(0, 1); 这个设置代表rowsid 这个参数是1,这点特别要注意。

 

如果很多读者要返回单个结果集,或者是执行某个存储过程想完成某个事项,返回参数不需要返回整个结果集,如果还想采用如此的方式进行,可以采用如下的方式来进行,只是在存储过程当中进行一些调整。

create or replace procedure singleout(st_cursor out SYS_REFCURSOR,rowsid integer) is
 temp_a varchar2(100);
begin
     --open st_cursor for select * from t_test t where t.id=rowsid;
     select t.sex into temp_a from t_test t where t.id = rowsid;
     open st_cursor for select temp_a as name,1 as id,1 as age,'man' as sex from dual;
end singleout;

这样的话,其他的调用方式跟上面一样的。

分享到:
评论
1 楼 coollifer 2011-04-10  
不错,关注老曹

相关推荐

    hibernate帮助文档 3.2、3.6、4.1

    4.1.7还强化了对JPA 2.1规范的实现,包括JSON-B支持和对存储过程的增强调用。最重要的是,它引入了“黑盒”测试工具,帮助开发者更好地测试和调试Hibernate应用。 在这些版本中,每个都对性能、API的易用性和数据库...

    hibernate3.2+mysql+log4j

    【hibernate3.2+mysql+log4j】是一个经典的Java开发组合,常用于构建基于JDBC的持久层框架,结合关系型数据库MySQL和日志管理库log4j。这个压缩包可能包含了运行一个使用Hibernate 3.2、MySQL数据库和log4j日志系统...

    Hibernate3.2中文参考文档

    在本"Hibernate3.2中文参考文档"中,我们将深入探讨该版本的核心特性和使用方法。 一、Hibernate概述 Hibernate是一个开源的ORM框架,它的主要功能是将Java对象模型与关系型数据库进行映射,实现了对象的持久化。在...

    Hibernate3.2官方中文参考手册.pdf

    根据提供的信息,我们可以了解到这份文档是关于Hibernate 3.2版本的官方中文参考手册。Hibernate是一种广泛使用的Java持久层框架,它提供了对象关系映射(ORM)功能,使得开发人员可以更加高效、灵活地处理数据库...

    hibernate3.2_GET方法

    标题“hibernate3.2_GET方法”指向的是关于Hibernate框架3.2版本中对象关系映射(ORM)工具的一个特定功能,即GET方法的使用。在Hibernate中,GET方法通常用于从数据库中检索持久化对象。这篇博客可能详细解释了如何...

    struts1.2+hibernate3.2+spring2.5+dwr

    Struts1.2、Hibernate3.2、Spring2.5...此外,还可能涵盖了如何解决这些框架在集成过程中可能出现的问题,比如配置问题、版本兼容性问题、性能优化等。这样的学习资源对于提升Java Web开发者的技能水平是非常有价值的。

    Struts 2.0整合Hibernate 3.2开发注册登录系统

    而Hibernate 3.2作为持久层框架,主要用于数据的存储和读取。这种架构设计使得系统具有良好的层次性和扩展性。 #### 二、开发环境搭建 1. **开发工具**: MyEclipse 6.0 2. **服务器**: Tomcat 5.5 3. **编程语言**...

    Struts2+Hibernate3.2+spring2.0+sqlserver2000

    Struts2、Hibernate3.2、Spring2.0和SQL Server 2000是Java Web开发中的四个关键组件,它们构成了一个强大的企业级应用框架,通常被称为SSH2(Struts2、Spring2、Hibernate2)集成框架。下面将详细阐述这些技术以及...

    Hibernate3.2官方中文参考手册

    ### Hibernate 3.2 官方中文参考手册知识点解析 ...此外,对于查询优化、缓存机制以及高级特性等方面也有一定的覆盖,使得开发者能够在实际项目中更加灵活地运用 Hibernate 技术解决复杂的数据持久化问题。

    Struts2+hibernate3.2的源代码

    在这个"Struts2+hibernate3.2的源代码"项目中,我们可以看到一个实际应用这两种技术的小型购书网站的实现。开发者通过这个练习来深化对Struts2和Hibernate的理解,同时也能帮助其他学习者更好地掌握这两个框架的结合...

    struts2.0 hibernate 3.2 spring 2.0(dwr jquery)所需文件包

    Hibernate 3.2 版本引入了许多改进,如支持JPA(Java Persistence API)、性能优化和更丰富的查询API(HQL和Criteria)。它可以处理复杂的数据映射,包括一对多、多对一、一对一等关系,并提供了缓存机制以提高性能...

    spring hibernate执行存储过程的例子

    Hibernate 3.2及以上版本开始支持存储过程的调用,主要通过Session的createSQLQuery方法。 ```java SessionFactory sessionFactory = ...; // 获取SessionFactory Session session = sessionFactory.openSession();...

    hibernate3.2+struts1.2+spring2.5整合源码带数据库表结构

    本项目提供了"hibernate3.2+struts1.2+spring2.5"的整合源码,旨在帮助开发者理解并实践这三者如何协同工作,实现一个完整的MVC(Model-View-Controller)架构的Web应用程序。 Hibernate是Java中的一个持久化框架,...

    Struts2.0-Hibernate3.2-Spring2.0整合

    本文档详细介绍了如何将Struts2.0、Hibernate3.2与Spring2.0三个框架进行整合的过程及其原理。这种整合模式不仅提高了开发效率,还增强了项目的可维护性和扩展性。下面我们将通过具体的步骤来实现这一整合过程。 ##...

    Hibernate-3.2源码包

    Hibernate 3.2 版本是 Hibernate 系列的一个重要里程碑,引入了许多改进和新特性,以提高性能和易用性。以下是对 Hibernate-3.2 源码包中的关键知识点的详细解释。 1. **对象关系映射(ORM)**:ORM 是 Hibernate ...

    投票系统struts2.0+hibernate3.2+spring2.5+sqlserver2005数据库,+JFReeChart饼图,柱状图显示。

    这是一个基于Java技术栈的投票系统实现,主要使用了Struts2.0作为MVC框架,Hibernate3.2作为持久层框架,Spring2.5作为应用上下文和依赖注入框架,以及SQL Server 2005作为后端数据库。此外,项目还引入了JFreeChart...

    Java SSH框架整合搭建Web系统(Struts1.2+Spring2.5+Hibernate3.2)

    ### Java SSH框架整合搭建Web系统(Struts1.2+Spring2.5+Hibernate3.2) #### 一、准备工作 在开始构建基于Struts1.2+Spring2.5+Hibernate3.2的Web应用之前,需要进行一系列的基础设置工作。 **1.1 创建工程** ...

Global site tag (gtag.js) - Google Analytics