Comment appeler la procédure de stockage MS SQL en utilisant Hibernate 4.0

Je travaille avec la procédure de magasin ie

CREATE PROCEDURE test ( @INPUTPARAM INT, @OUTPUTPARAM VARCHAR(20) ) AS SELECT @OUTPUTPARAM=S.NAME+','+D.NAME FROM STUDENT S,DEPARTMENT D WHERE S.DEPTID=D.DEPARTID AND D.DEPARTID=@INPUTPARAM BEGIN END 

comment sortir le paramètre de la class java en utilisant hibernate s'il vous plaît partager l'exemple de code

 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 

EXECUTER Procédure

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

La seule façon de le faire est d'utiliser em.createNativeQuery et de parler directement avec vous DB Server dans SQL.

Mettre à jour:

Voici comment cela pourrait être fait:

 //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. 

J'espère que ça aide un peu.

Remarques:

Si vous utilisez JPA 2.0, vous pouvez get la session en utilisant

 Connection conn = em.unwrap(Session.class).connection(); 

Si vous utilisez JPA 2.1, vous pouvez appeler des procédures stockées directement

  StoredProcedureQuery query = em.createNamedStoredProcedureQuery("ReadAddressById"); query.setParameter("P_ADDRESS_ID", 12345); List<Address> result = query.getResultList();