sql >> Databasteknik >  >> RDS >> PostgreSQL

Kan inte anropa PostgreSQL:s 11 lagrade procedur med Hibernate

Eftersom pgJDBC 42.2.5 släpptes före (augusti 2018) till PostgreSQL 11-versionen (okt, 2018), tror jag att detta för närvarande är ett problem inom JDBC-drivrutinen för PostgreSQL själv. Jag har skapat ett problem inom GitHub-förvaret.

Som en lösning kan du skriva om STORED PROCEDURE som en FUNCTION och använd @NamedStoredProcedureQuery eller interagera direkt med JDBC CallableStatement t.ex.:

Connection conn = DriverManager.getConnection("jdbc:postgresql://localhost:5432/", "postgres", "postgres");

CallableStatement callableStatement = conn.prepareCall("{call f_raise_wage_employee_older_than(?,?)}");
callableStatement.setInt(1, 20);
callableStatement.setInt(2, 500);
callableStatement.executeUpdate();

Eller kör en inbyggd fråga med EntityManager :

this.em.createNativeQuery("CALL p_raise_wage_employee_older_than(1, 20)");

Jag kommer att uppdatera det här svaret så fort jag får svar från pgJDBC-underhållaren.

UPPDATERING:

Det här ämnet diskuteras redan i Postgres e-postlista (https://www.postgresql.org/message-id/4285.1537201440%40sss.pgh.pa.us ) och det finns för närvarande ingen lösning. Det enda sättet är att skicka inbyggda SQL-frågor till databasen eller skriva om STORED PROCEDURE som en FUNCTION



  1. Överbrygga Azure-gapet:Hanterade instanser

  2. html/php/sql-formulär med infoga/uppdatering

  3. Hur förhindrar man radering av den första raden i tabellen (PostgreSQL)?

  4. Trunc datumfält i mysql som Oracle