Как использовать JPA 2.1 @NamedStoredProcedureQueries с параметрами возврата void?

#java #hibernate #postgresql #jpa

#java #спящий режим #postgresql #jpa

Вопрос:

Учитывая следующий аннотированный запрос именованной хранимой процедуры:

 @NamedStoredProcedureQueries({
    @NamedStoredProcedureQuery(
        name = "procedureName",
        procedureName = "stored_procedure"
    )
})
  

Затем выполняется с:

 StoredProcedureQuery query = entityManager.createNamedStoredProcedureQuery("procedureName");
query.executeUpdate();
  

stored_procedure возвращает postgres void .

Приводит к исключению: Caused by: org.hibernate.MappingException: No Dialect mapping for JDBC type: 1111
.

Как это можно решить?

Ответ №1:

Я решил эту проблему, используя некоторый вспомогательный код.

 @SqlResultSetMapping(
    name = "VOID_MAPPING",
    classes = {
        @ConstructorResult(targetClass = VoidClass.class, columns = {})
    }
)
  

Добавление результирующих наборов в @NamedStoredProcedureQuery .

  resultSetMappings = {
        "VOID_MAPPING"
 }
  

VoidClass — это просто пустой класс.

 public class VoidClass {}
  

Но я надеюсь на лучшее решение.