sql >> データベース >  >> RDS >> PostgreSQL

HibernateでPostgreSQLの11ストアドプロシージャを呼び出すことができません

    pgJDBC42.2.5はPostgreSQL11リリース(2018年10月)より前(2018年8月)にリリースされたため、これは現在PostgreSQL自体のJDBCドライバー内の問題だと思います。 問題 を作成しました GitHubリポジトリ内。

    回避策として、STORED PROCEDUREを書き直すことができます。 FUNCTIONとして @NamedStoredProcedureQueryを使用します または、JDBC CallableStatementと直接対話します 例:

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

    または、EntityManagerを使用してネイティブクエリを実行します :

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

    pgJDBCメンテナから回答があり次第、この回答を更新します。

    更新:

    このトピックは、Postgresメーリングリスト( https: //www.postgresql.org/message-id/4285.1537201440%40sss.pgh.pa.us )そして現在解決策はありません。唯一の方法は、ネイティブSQLクエリをデータベースに渡すか、STORED PROCEDUREを書き直すことです。 FUNCTIONとして



    1. JavaPreparedStatementおよびONDUPLICATEKEY UPDATE:行が挿入されたか更新されたかを知るにはどうすればよいですか?

    2. Workbenchを使用してSSHトンネル経由でリモートMySQLサーバーに接続する

    3. MySQLでNOTEQUAL値を取得するために複数のテーブルを結合する

    4. SQLDeveloperまたはToadとしてのIDEツールを使用したOracleParallelQueryの動作