簡體   English   中英

如何使用休眠方式返回存儲過程的生成值

[英]How to return the generated value of a stored procedure using 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語句,將所有值都設置到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。 請提出一種獲得身份證明的最佳方法。 謝謝。

你不會得到這樣的證書嗎?

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM