Hibernate call sql серверная хранимая процедура выдает Неверный синтаксис рядом с '@ P0' - PullRequest
0 голосов
/ 07 февраля 2020

серверная хранимая процедура sql выглядит следующим образом:

CREATE PROCEDURE SelectStaff @rankabbr varchar(14), @sex varchar(1)
AS
SELECT * FROM staff WHERE rankabbr = @rankabbr AND sex = @sex

, и я могу успешно запустить ее в SSMS с помощью

exec SelectStaff  'AEO', 'M';

, но в eclipse я использую hibernate для вызова эта хранимая процедура выглядит следующим образом:

Session session2 = HibernateUtil.getCurrentSession();
org.hibernate.Query query = session2.createSQLQuery(" call SelectStaff(:rankabbr, :sex) ")                    
          .setParameter("rankabbr","AEO")
          .setParameter("sex", "M");
List<Object[]> results =query.list();

, но ошибка возвращается следующим образом:

23: 30: 57,708 WARN [org.hibernate.engine.jdb c .spi. SqlExceptionHelper] (задание по умолчанию-7) SQL Ошибка: 102, SQLState: S0001 23: 30: 57,741 ОШИБКА [org.hibernate.engine.jdb c .spi.SqlExceptionHelper] (задание по умолчанию-7) Неверный синтаксис рядом с ' @ P0 '.

в чем причина? Я попытался добавить {} в вызове как

org.hibernate.Query query = session2.createSQLQuery("{ call SelectStaff(:rankabbr, :sex) }")                      
                      .setParameter("rankabbr","AEO")
                      .setParameter("sex", "M");

, но ошибка та же.

Я пытаюсь заменить SQLServerDialect на SQLServer2012Dialect, но та же ошибка.

1 Ответ

0 голосов
/ 07 февраля 2020

Я считаю, что следующий код работает:

Session session2 = HibernateUtil.getCurrentSession();
ProcedureCall call = session2.createStoredProcedureCall("SelectStaff");
call.registerParameter( 1, String.class, ParameterMode.IN).bindValue("AEO");
call.registerParameter( 2, String.class, ParameterMode.IN).bindValue("M");
Output output = call.getOutputs().getCurrent();
List<Object[]> results;
if (output.isResultSet()) {
     results = ( (ResultSetOutput) output ).getResultList();
     for (Object[] row:results) {
         // ......
     }
}
...