На данный момент наш проект использует JPA для вызова хранимой процедуры, подобной этой:
StoredProcedureQuery query = em.createStoredProcedureQuery("Package.Procedure")
.registerStoredProcedureParameter(1, Long.class, ParameterMode.IN)
.registerStoredProcedureParameter(2, String.class, ParameterMode.IN)
.registerStoredProcedureParameter(3, String.class, ParameterMode.IN)
.registerStoredProcedureParameter(4, Long.class, ParameterMode.IN)
.registerStoredProcedureParameter(5, String.class, ParameterMode.IN)
.registerStoredProcedureParameter(6, String.class, ParameterMode.IN)
.registerStoredProcedureParameter(7, String.class, ParameterMode.IN)
.registerStoredProcedureParameter(8, String.class, ParameterMode.IN)
.registerStoredProcedureParameter(9, Long.class, ParameterMode.IN)
.registerStoredProcedureParameter(10, Class.class, ParameterMode.REF_CURSOR)
.setParameter(1, null)
.setParameter(2, null)
.setParameter(3, null)
.setParameter(4, null)
.setParameter(5, null)
.setParameter(6, null)
.setParameter(7, null)
.setParameter(8, null)
.setParameter(9, null);
List<Object[]> result = query.getResultList();
Выходные данные представляют собой таблицу, в которой есть 2 столбца отметки времени.
Когда я пытаюсь запустить этот код, мы получаем исключение:
Причина: org.hibernate.MappingException: Нет сопоставления диалектов для типа JDBC: -101
Когда я ищу, -101 означает, что результат содержит метки времени и не может его преобразовать, я думаю. Мы пытаемся удалить столбец с двумя временными метками из процедуры, и все работает.
Я пытаюсь найти решение, и большинство ответов говорят мне о приведении значения перед возвратом или "addScalar". Но тот, кто создает эту процедуру, не хочет ее обновлять и просит нас найти решение для нее.
Так может ли кто-нибудь сказать мне, что мне делать в этом случае?