PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

JPA 2.1 StoredProcedureQuery с PostgreSQL и REF_CURSORs

Кратък отговор:Обърнете реда на двете ви извиквания към registerStoredProcedureParameter() :

storedProcedure.registerStoredProcedureParameter(1, Object.class, ParameterMode.REF_CURSOR);
storedProcedure.registerStoredProcedureParameter(2, String.class, ParameterMode.IN);

Дълъг отговор:Разрових се в Изходен код на Hibernate за поддръжка на извикващи изрази на Postgress и установи, че всеки registerStoredProcedureParameter() повикването създава ParameterRegistrationImplementor екземпляр, който се поставя в списък и се предава наоколо. Ще забележите, че този клас съхранява позицията на параметъра, която е независима от позицията му в списъка.

По-късно този списък е анализирани и предполага, че REF_CURSOR параметърът ще бъде първи на ред и ще изведе вашето съобщение за грешка, ако REF_CURSOR параметърът не е първи, независимо какъв е номерът на параметъра .

Не е много интелигентен начин за правене на нещата (IMHO), но поне заобиколното решение е лесно:ако размените реда на обажданията си, трябва да сте добре.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. postgreSQL - in vs any

  2. Друг начин за прехвърляне на varbit към int? И bigint?

  3. Как да архивирате разделена таблица в PostgresSQL 10

  4. Функция за връщане на динамичен набор от колони за дадена таблица

  5. Разделете върнатия от функцията запис на множество колони