【问题标题】:How to return the generated value of a stored procedure using hibernate如何使用休眠返回存储过程的生成值
【发布时间】:2013-07-17 22:48:44
【问题描述】:

我是 hibernate 的新手,我遇到了一个场景,我需要使用 hibernate 调用存储过程。我正在使用本机查询来调用我的存储过程。下面的代码是我将所有参数设置为存储过程的地方。我在我的实体中声明了我的查询。

ENTITY class:


      @Entity
        @NamedNativeQueries({
            @NamedNativeQuery(
            name = "callStoreProcedure",
            query = "CALL SP_INS_EPC_CERTIFICATE_EVENTS(:BUS_PARTNER_ID ,:PROVIDER_NAME,:PROVIDER_ADDR_LINE1,:PROVIDER_ADDR_LINE2 ,:PROVIDER_CITY,:PROVIDER_STATE,EPC_CERTIFICATE)",
        resultClass = DOEPCTest.class)

        })

存储过程:

CREATE PROCEDURE EPRMTADM.SP_INS_EPC_CERTIFICATE_EVENTS
(
          -- IN EPC_CERTIFICATE_ID INTEGER,
          IN P_BUS_PARTNER_ID CHAR(6),
          IN P_PROVIDER_NAME VARCHAR(80),
          IN P_PROVIDER_ADDR_LINE1 VARCHAR(80),
          IN P_PROVIDER_ADDR_LINE2 VARCHAR(80),
          IN P_PROVIDER_CITY VARCHAR(80),
          IN P_PROVIDER_STATE CHAR(2),
          OUT P_EPC_CERTIFICATE_ID INTEGER
)

(....INSERT Statments 将所有值设置到 PROC)

SET P_EPC_CERTIFICATE_ID = IDENTITY_VAL_LOCAL();

OUT P_EPC_CERTIFICATE_ID INTEGER 返回 certificate_id

Query query = sessionFactory.getCurrentSession().getNamedQuery("callStoreProcedure").
                setParameter("BUS_PARTNER_ID", "0123");
                setParameter("PROVIDER_NAME", "qwe");
                query.setParameter("PROVIDER_ADDR_LINE1", "asdasd");
                query.setParameter("PROVIDER_ADDR_LINE2", "aasd");  
                query.setParameter("PROVIDER_CITY", "asd");
                query.setParameter("PROVIDER_STATE", "pa");
                        List result = query.list();

由于我的 CERTIFICATE_ID 是生成的值,我无法设置它,它是返回值。我如何在休眠中处理它。是否有任何标准 api 可以返回 OUT P_EPC_CERTIFICATE_ID INTEGER 输出

这是当我调用这个存储过程时由 DB2 生成的身份密钥。有没有办法得到这个证书 id。我可以设置参数但是。我不能得到这个值。我想我应该传递一些类似的东西。

   procedure.registerOutParameter(EPC_CERTIFICATE_ID , java.sql.Types.INTEGER);

但我不知道如何在休眠中使用 Query。请提出一个最好的方法来让身份出来。谢谢。

【问题讨论】:

    标签: java spring hibernate hibernate-mapping hibernate-annotations


    【解决方案1】:

    这样的证书你不拿吗?

    for(int i=0; i<result.size(); i++){
            DOEPCTest doepcTest = (DOEPCTest)result.get(i);
            System.out.println(doepcTest.getEPC_CERTIFICATE_ID());
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-18
      • 2014-08-08
      • 2011-01-25
      相关资源
      最近更新 更多