[英]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.