Отображение типа Postgresql на параметры OUT / IN хранимой процедуры JPA - PullRequest
0 голосов
/ 24 апреля 2020

У меня есть функция postgresql, которая читает один входной параметр типа jsonb и возвращает результат как jsonb. Мне удалось найти примеры сопоставления столбцов сущностей, но я не нашел ни одного примера сопоставления выходных / входных параметров. Был бы признателен, если кто-то может помочь через JPA / Hibernate.

PostgreSQL Функция

$$ 
declare err_context text;
BEGIN
RETURN QUERY 
select row_to_json(t)
from 
(select a.id as id,
       a.location as location,
       a.name     as name,
       a.agg_name      as agg_name,
       a.order as order
 from mydb.mytable a
where a.status='0' 
 and not exists
      (select ua.user_id 
         from mydb.myuser ua  
        where ua.user_id=p_userid
          and ua.id=a.id)) t;

end
 $$

p_userid . это строка в Java Репозиторий

Результирующий набор выводится. это PGobject

код JPA

StoredProcedureQuery procedureQuery = e.createStoredProcedureQuery("mydb.myfunction");
procedureQuery.registerStoredProcedureParameter(1, String.class, ParameterMode.IN);
procedureQuery.setParameter(1, "some_value");
List resultList = procedureQuery.getResultList();
System.out.println(resultList);

ошибка

Caused by: org.hibernate.MappingException: No Dialect mapping for JDBC type: 1111
    at org.hibernate.dialect.TypeNames.get(TypeNames.java:71) ~[hibernate-core-5.4.12.Final.jar:5.4.12.Final]
    at org.hibernate.dialect.TypeNames.get(TypeNames.java:103) ~[hibernate-core-5.4.12.Final.jar:5.4.12.Final]
    at org.hibernate.dialect.Dialect.getHibernateTypeName(Dialect.java:706) ~[hibernate-core-5.4.12.Final.jar:5.4.12.Final]
    at org.hibernate.loader.custom.JdbcResultMetadata.getHibernateType(JdbcResultMetadata.java:100) ~[hibernate-core-5.4.12.Final.jar:5.4.12.Final]
    at org.hibernate.loader.custom.ScalarResultColumnProcessor.performDiscovery(ScalarResultColumnProcessor.java:45) ~[hibernate-core-5.4.12.Final.jar:5.4.12.Final]
    at org.hibernate.loader.custom.CustomLoader.autoDiscoverTypes(CustomLoader.java:494) ~[hibernate-core-5.4.12.Final.jar:5.4.12.Final]
    at org.hibernate.result.internal.OutputsImpl$CustomLoaderExtension.processResultSet(OutputsImpl.java:317) ~[hibernate-core-5.4.12.Final.jar:5.4.12.Final]
    at org.hibernate.result.internal.OutputsImpl.extractResults(OutputsImpl.java:140) ~[hibernate-core-5.4.12.Final.jar:5.4.12.Final]
    at org.hibernate.result.internal.OutputsImpl.extractCurrentResults(OutputsImpl.java:131) ~[hibernate-core-5.4.12.Final.jar:5.4.12.Final]
    at org.hibernate.result.internal.OutputsImpl.access$100(OutputsImpl.java:39) ~[hibernate-core-5.4.12.Final.jar:5.4.12.Final]
    at org.hibernate.result.internal.OutputsImpl$CurrentReturnState.buildOutput(OutputsImpl.java:191) ~[hibernate-core-5.4.12.Final.jar:5.4.12.Final]
    at org.hibernate.result.internal.OutputsImpl$CurrentReturnState.getOutput(OutputsImpl.java:175) ~[hibernate-core-5.4.12.Final.jar:5.4.12.Final]
    at org.hibernate.result.internal.OutputsImpl.getCurrent(OutputsImpl.java:95) ~[hibernate-core-5.4.12.Final.jar:5.4.12.Final]
    at org.hibernate.procedure.internal.ProcedureCallImpl.getResultList(ProcedureCallImpl.java:719) ~[hibernate-core-5.4.12.Final.jar:5.4.12.Final]
...