Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用hibernate 4.0调用ms sql存储过程_Java_Sql Server_Hibernate_Stored Procedures - Fatal编程技术网

Java 如何使用hibernate 4.0调用ms sql存储过程

Java 如何使用hibernate 4.0调用ms sql存储过程,java,sql-server,hibernate,stored-procedures,Java,Sql Server,Hibernate,Stored Procedures,我正在处理存储程序 i、 e 如何使用hibernate从java类中取出参数 请分享代码示例唯一的方法是使用em.createNativeQuery并直接与SQL中的DB Server对话 更新: 以下是如何做到这一点: //get connection from em Session session = (Session)em.getDelegate(); Connection conn = session.connection(); //Native SQL final Callable

我正在处理存储程序 i、 e

如何使用hibernate从java类中取出参数
请分享代码示例

唯一的方法是使用
em.createNativeQuery
并直接与SQL中的DB Server对话

更新:

以下是如何做到这一点:

//get connection from em
Session session = (Session)em.getDelegate();
Connection conn = session.connection();

//Native SQL
final CallableStatement callStmt = conn.prepareCall("{call your.function(?)}");
callStmt.setLong(1, documentId);
callStmt.execute();

if (callStmt.getMoreResults()) {
   ResultSet resSet = cStmt.getResultSet();
   //Do something good with you result
   resSet.close();
}
callStmt.close();

//Don't know if calling conn.close(); is a good idea. Since the session owns it.
希望对你有点帮助

注意事项:

如果您使用的是JPA2.0

如果您使用的是JPA2.1,那么可以调用存储过程

StoredProcedureQuery=em.createNamedStoredProcedureQuery(“ReadAddressById”);
setParameter(“P_ADDRESS_ID”,12345);
List result=query.getResultList();
创建程序测试
(
@输入参数INT,

@OUTPUTPARAM VARCHAR(20)输出——对不起,这是我的输入错误,我想从java代码调用过程,而不是从查询浏览器调用过程。无论从何处调用过程,如果要检索value,都需要将参数设置为输出参数。out参数在调用store过程时让我感到困惑。我不知道如何使用hibernate.ma注册put参数ybe可以帮助你。为什么否决我的答案?
//get connection from em
Session session = (Session)em.getDelegate();
Connection conn = session.connection();

//Native SQL
final CallableStatement callStmt = conn.prepareCall("{call your.function(?)}");
callStmt.setLong(1, documentId);
callStmt.execute();

if (callStmt.getMoreResults()) {
   ResultSet resSet = cStmt.getResultSet();
   //Do something good with you result
   resSet.close();
}
callStmt.close();

//Don't know if calling conn.close(); is a good idea. Since the session owns it.
Connection conn = em.unwrap(Session.class).connection();
 StoredProcedureQuery query = em.createNamedStoredProcedureQuery("ReadAddressById");
 query.setParameter("P_ADDRESS_ID", 12345);
 List<Address> result = query.getResultList();
CREATE PROCEDURE test 
(
@INPUTPARAM INT,
@OUTPUTPARAM VARCHAR(20) OUTPUT --<-- You need to use key word "OUTPUT" here
)
AS
BEGIN

  SELECT @OUTPUTPARAM = S.NAME + ',' + D.NAME
  FROM  STUDENT S INNER JOIN DEPARTMENT D
  ON    S.DEPTID = D.DEPARTID         --<-- Use New Syntax of join with On Clause
  WHERE D.DEPARTID = @INPUTPARAM

END
DECLARE @Var VARCHAR(20);
EXECUTE dbo.test 
@INPUTPARAM = 1
@OUTPUTPARAM = @Var OUTPUT --<-- use OUTPUT key word here as well

SELECT  @Var