java-JPA和PostgreSQL:如何调用具有空返回类型的存储过程?
作者:互联网
我正在尝试调用执行更新的PL / pgSQL函数(语言sql,返回void).我收到此异常:
内部异常:org.postgresql.util.PSQLException:如果没有预期结果,则返回结果.
persistence.xml:
<named-native-query name="Clinic.deactivateByNotFoundInIncomingClinic">
<query>
<![CDATA[
select apply_incoming_clinic_deletions(?)
]]>
</query>
</named-native-query>
道:
public void deactivateByNotFoundInIncomingClinic(long clinicSystemId)
{
em.createNamedQuery("Clinic.deactivateByNotFoundInIncomingClinic")
.setParameter(1, clinicSystemId)
.executeUpdate();
}
救命!
更新:
在GlassFish 3.1.1上使用EclipeseLink通过PostgreSQL 9.0-801 JDBC 4驱动程序与PostgreSQL 9.0数据库通信.
解决方法:
不知道这是从哪里来的.问题中缺少您的函数定义.
但是您可以尝试使用plpgsql函数而不是sql.当声明为RETURNS void时,它们的返回类型略有不同.考虑这个演示:
CREATE OR REPLACE FUNCTION f_sql()
RETURNS void AS
'UPDATE foo SET id = id+1 WHERE id = 34567'
LANGUAGE sql;
CREATE OR REPLACE FUNCTION f_plpgsql()
RETURNS void AS
$$
BEGIN
UPDATE foo SET id = id+1 WHERE id = 34567;
END;
$$ LANGUAGE plpgsql;
现在,VOID是虚拟类型.虽然plpgsql函数实际上返回VOID,但SQL函数似乎返回NULL.我不确定自己为什么会这样.
db=# SELECT f_sql() IS NULL;
?column?
----------
t
db=# SELECT f_plpgsql() IS NULL;
?column?
----------
f
标签:postgresql,jpa,plpgsql,java 来源: https://codeday.me/bug/20191102/1987629.html