我正尝试在 hibernate 状态下使用 createSQLQuery 方法调用 SQL Server 存储过程,但出现异常。请帮助我,因为我是 hibernate 状态的新手。
异常(exception):
org.hibernate.exception.SQLGrammarException: could not execute query
SQL Server 存储过程-
CREATE PROCEDURE [dbo].[sqlServerProc]
(@SOURCE_AID NUMERIC(18,0),
@DESTI_BID NUMERIC(18,0),
@E_CID NUMERIC(18,0),
@MOVE_DID BIT,
@RST_ADDED VARCHAR(MAX) = '' OUTPUT,
@LST_ADDED VARCHAR(MAX) = '' OUTPUT,
@PST_ADDED VARCHAR(MAX) = '' OUTPUT,
@IS_VALUE BIT = 0 OUTPUT
)
hibernate 代码:
public String Function(String AId,String BId,String CId,String DID ) throws Exception
{
try{
session = getSessionFactory().openSession();
session.beginTransaction();
Query query = session.createSQLQuery(
"CALL sqlServerProc(:AId,:BId,:CId,:DID)").setParameter("AId", AId).
setParameter("BId", BId).
setParameter("CId", CId).
setParameter("DID", DID).
;
ListOfEnvData= query.list();
for (Object[] aRow :ListOfEnvData) {
String a = (String) aRow[0];
String b = (String) aRow[1];
String c = (String) aRow[2];
String d = (String) aRow[3];
System.out.println("a"+a+"b"+b+"c"+c+"d"+d);
// value=d;
break;
}
}catch(Exception e){
session.close();
e.printStackTrace();
}}
最佳答案
尝试:
Query query = em.createNativeQuery("EXECUTE sp_log :objectName, :log, :additionalInfo");
query.setParameter("objectName", name);
query.setParameter("log", log);
query.setParameter("additionalInfo", info);
query.executeUpdate();
但是,您可以在没有 Hibernate 的情况下执行此操作,例如:
public void callMyProc(SomeEntity someEntity) {
Connection connection = null;
try {
connection = getConnection();
CallableStatement cstmt = connection.prepareCall("{call dbo.my_procedure(?)}");
cstmt.setLong(1, someEntity.getId());
cstmt.execute();
} catch (SQLException e) {
e.printStackTrace();
} finally {
close(connection);
}
}
关于java - 使用 hibernate 调用 SQL Server 存储过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43674556/