PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Impossibile chiamare la stored procedure 11 di PostgreSQL con Hibernate

Poiché pgJDBC 42.2.5 è stato rilasciato prima (agosto 2018) della versione PostgreSQL 11 (ottobre 2018), penso che questo sia attualmente un problema all'interno del driver JDBC per PostgreSQL stesso. Ho creato un problema all'interno del repository GitHub.

Per una soluzione alternativa, puoi riscrivere la STORED PROCEDURE come FUNCTION e usa @NamedStoredProcedureQuery oppure interagisci direttamente con il CallableStatement di JDBC es.:

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();

Oppure esegui una query nativa con EntityManager :

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

Aggiornerò questa risposta non appena riceverò una risposta dal manutentore di pgJDBC.

AGGIORNAMENTO:

Questo argomento è già discusso nella mailing list di Postgres (https://www.postgresql.org/message-id/4285.1537201440%40sss.pgh.pa.us ) e attualmente non esiste una soluzione. L'unico modo è passare le query SQL native al database o riscrivere la STORED PROCEDURE come FUNCTION