sql >> Database >  >> RDS >> PostgreSQL

JPA 2.1 StoredProcedureQuery met PostgreSQL en REF_CURSORs

Kort antwoord:keer de volgorde van uw twee aanroepen om naar registerStoredProcedureParameter() :

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

Lang antwoord:ik heb wat gegraven in de Hibernate-broncode voor ondersteuning van Postgress callable-statements , en ontdekte dat elke registerStoredProcedureParameter() oproep maakt een ParameterRegistrationImplementor instantie die in een lijst wordt geplakt en wordt doorgegeven. U zult zien dat deze klasse de positie van de parameter opslaat, die onafhankelijk is van zijn positie in de lijst.

Later is deze lijst en gaat ervan uit dat de REF_CURSOR parameter zal als eerste in de rij staan ​​en geeft je foutmelding als een REF_CURSOR parameter is niet de eerste, ongeacht wat het parameternummer is .

Geen erg slimme manier om dingen te doen (IMHO), maar de oplossing is in ieder geval eenvoudig:als je de volgorde van je oproepen verandert, zou het goed moeten komen.




  1. MaxMind's GeoLite2 importeren naar MySQL

  2. Converteer string/varchar naar datum tussen MySQL-tabellen

  3. Hoe MySQL 8 op Ubuntu te installeren

  4. hoe rijwaarden dynamisch naar kolom te maken in mysql