java - 使用 hibernate 调用 SQL Server 存储过程

标签 java sql-server hibernate

我正尝试在 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/

相关文章:

java - 如何在java中获取空格时将字符串值放入新行

java - 使用 "item1.item1A"等键访问 map 中的深层对象

sql-server - 案例 null SQL Server 2008

java - 将 Hibernate 数据源与 JFreeCharts 一起使用

hibernate - hql 加入@CollectionTable

java - 如何从 Java 类访问我在 build.gradle 中的项目版本

sql-server - 将 SDF 数据库转换为 MDF

java - 加载 JDBC 驱动程序时出现 classNotFoundException

java - Spring 3 注入(inject) Hibernate Session 的最佳方法

java - Struts 2中如何通过XML配置来配置@SkipValidation