PostgreSQLデータベースでストアドプロシージャを呼び出そうとしています。このプロシージャは、表エントリの挿入、更新および削除を処理するため、paramsを受け入れます。実行したい操作の種類に応じて、パラメタの一部がnullになることがあります。私はHibernateのSessionFactoryを使ってprocを呼び出すことができましたが、今はJPA EntityManagerを使いたいと思います。次のようにのSessionFactoryを使用して手順は次のとおりです。EntityManagerを使用してPostgreSQL Procを呼び出す
public Result callFunction(String type_proc, String node, String fullcode, Date bdate){
Session session = this.sessionFactory.getCurrentSession();
org.hibernate.Query query = session.createSQLQuery(
"SELECT*FROM public.someFunction(:type_proc, :node, :fullcode, :bdate, CAST(:cat_id AS BIGINT)")
.addEntity(Result.class)
.setParameter("type_proc", type_proc)
.setParameter("node", node)
.setParameter("fullcode", fullcode)
.setParameter("bdate", bdate)
.setParameter("cat_id", null, LongType.INSTANCE)
return (Result) query.uniqueResult();
}
あなたが見ることができるように、私は二回、フィールドの種類を指定します。Java、Postgresのための1対1に。これで、EntityManagerを使用して同じことを行うと、LongType.INSTANCEを引数として受け入れるsetParameterメソッドはありません。この問題を回避する方法はありますか?
EDIT:jdbcTemplateを使用してこれを行う方法も探しています。この方法を試してみます:https://docs.spring.io/spring/docs/current/spring-framework-reference/html/jdbc.html#jdbc-simple-jdbc-call-1が、.execute(in)行にNullPointerExceptionがあります。
答えをありがとう。私はそれを試し、あなたに戻ってきます。 – Burs
ここでdbは、関数にパラメータを渡していないと言っています。私はそれを渡し、それはnullだった。 – Burs
あなたは約5パラメータを話していますか?私の答えでは、それはnullです。 – HAYMbl4