java使用EntityManager调用PostgreSQL过程
我正在尝试调用PostgreSQL数据库上的存储过程。该过程处理插入、更新和删除表项,因此它接受参数。某些参数有时为null,具体取决于要执行的操作类型。我可以使用Hibernate的SessionFactory调用proc,但现在我想使用JPA EntityManager。使用SessionFactory的过程如下所示:
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。现在,如果我使用EntityManager执行相同的操作,则没有接受LongType的setParameter方法。实例作为参数。有什么解决办法吗
编辑:也在寻找一种使用jdbcTemplate实现这一点的方法。尝试这样做:https://docs.spring.io/spring/docs/current/spring-framework-reference/html/jdbc.html#jdbc-simple-jdbc-call-1,但在上得到了NullPointerException。按行执行
# 1 楼答案
也许你应该使用
EntityManager.createStoredProcedureQuery
。通过这种方式,可以设置参数的类型,例如:我用了
EntityManager.createStoredProcedureQuery
for Oracle可能对你有帮助