工程里已有product和order_product这俩表对应的class和hbm文件 
我的存储过程是: 
CREATE PROCEDURE `delp`(IN x int(11)) 
BEGIN DELETE product,order_product FROM product,order_product WHERE product.productid=order_product.productid AND product.productid=x; END; 
//-----------------------// 
hibernate的hbm里要如何配置啊?DAO里又应如何让写啊,参数应如何设置啊? 

解决方案 »

  1.   

    hibernate调用存储过程我还没试过,但是我知道可以调用本地sql语言。
      

  2.   

    如果底层数据库(如Oracle)支持存储过程,也可以通过存储过程来执行批量更新。存储过程直接在数据库中运行,速度更加快。在Oracle数据库中可以定义一个名为batchUpdateStudent()的存储过程,代码如下:create or replace procedure batchUpdateStudent(p_age in number) as
    begin
    update STUDENT set AGE=AGE+1 where AGE>p_age;
    end;以上存储过程有一个参数p_age,代表学生的年龄,应用程序可按照以下方式调用存储过程:tx = session.beginTransaction();
    Connection con=session.connection();String procedure = "{call batchUpdateStudent(?) }";
    CallableStatement cstmt = con.prepareCall(procedure);
    cstmt.setInt(1,0); //把年龄参数设为0
    cstmt.executeUpdate();
    tx.commit();在以上代码中,我用的是Hibernate的 Transaction接口来声明事务,而不是采用JDBC API来声明事务 
      

  3.   

    http://www.blogjava.net/amigoxie/archive/2007/08/15/136828.html
      

  4.   

    请参考《JAVA 存储过程》
      

  5.   

    存储过程你可以在sql语句直接调用就行了,hbm不需配置吧。
      

  6.   


    如果有关于返回的存储过程,就需要设置了,至少让hibernate该把返回变成什么对象(数组)吧~
      

  7.   


    这个是正确的
    因为Hibernate3.2以前是不支持数据库存储过程的。
    3.2后的版本支持。
      

  8.   

    ( ⊙ o ⊙ )啊!?我用的是hibernate3.1,就不能用存储过程了?
    还有,我用的是继承hibernatedaosupport,像这样同时删除product表及其在order_product表通过productid关联的信息
    public void delete(int pid) throws Exception
    {
    String hql = "DELETE FROM Product WHERE productid=?";
    //String shql = "DELETE product,order_product FROM product,order_product WHERE product.productid=order_product.productid AND product.productid=?";
    Query q = super.getSession().createSQLQuery(hql);
    //int i=0;
    //Query q = super.getSession().getNamedQuery("delp");
    //q.setInteger(0, i);
    q.setInteger(0, pid);
    q.executeUpdate();
    }
      

  9.   

    Hibernate 3引入了对存储过程查询的支持. 存储过程必须返回一个结果集,作为Hibernate能够使用的第一个外部参数. 下面是一个Oracle9和更高版本的存储过程例子. CREATE OR REPLACE FUNCTION selectAllEmployments 
        RETURN SYS_REFCURSOR 
    AS 
        st_cursor SYS_REFCURSOR; 
    BEGIN 
        OPEN st_cursor FOR 
     SELECT EMPLOYEE, EMPLOYER, 
     STARTDATE, ENDDATE, 
     REGIONCODE, EID, VALUE, CURRENCY 
     FROM EMPLOYMENT; 
          RETURN  st_cursor; 
     END;
    在Hibernate里要要使用这个查询,你需要通过命名查询来映射它. <sql-query name="selectAllEmployees_SP" callable="true">
        <return alias="emp" class="Employment">
            <return-property name="employee" column="EMPLOYEE"/>
            <return-property name="employer" column="EMPLOYER"/>            
            <return-property name="startDate" column="STARTDATE"/>
            <return-property name="endDate" column="ENDDATE"/>            
            <return-property name="regionCode" column="REGIONCODE"/>            
            <return-property name="id" column="EID"/>                        
            <return-property name="salary"> 
                <return-column name="VALUE"/>
                <return-column name="CURRENCY"/>            
            </return-property>
        </return>
        { ? = call selectAllEmployments() }
    </sql-query>