【问题标题】:Calling a SQL sever stored procedure using hibernate使用休眠调用 SQL Server 存储过程
【发布时间】:2017-04-28 07:33:41
【问题描述】:

我正在尝试在休眠中使用 createSQLQuery 方法调用 SQL Server 存储过程,但遇到异常。请帮助,因为我是休眠新手。

例外:

   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
 )     

休眠代码:

 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();

          }}

【问题讨论】:

  • 请帮忙!!!

标签: java sql-server hibernate


【解决方案1】:

试试:

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);
        }
    }

【讨论】:

    猜你喜欢
    • 2018-06-18
    • 2014-03-02
    • 1970-01-01
    • 2019-02-20
    • 2014-08-08
    • 1970-01-01
    • 2012-12-06
    • 2015-10-14
    相关资源
    最近更新 更多