我使用一个命名查询来调用postgresql中的函数。该函数接受json作为输入,但当我将查询传递给jpa时,它会去掉1个冒号,从而生成不正确的查询。
这是我的密码
query = entityManager.createNativeQuery("select * from transfer_validate(\'{\"a\":\"100\",\"b\":\"200\"}\'::json,\'{\"a\":\"100\",\"b\":\"200\"}\'::json);");
query.getResultList();
下面是函数的创建方式:
CREATE OR REPLACE FUNCTION transfer_validate(_d json, _l json)
这是生成的错误:
org.postgresql.util.PSQLException: ERROR: syntax error at or near ":"
Position: 67
下面是在hibernate日志中为postgres生成的sql
select * from transfer_validate('{"a":"100","b":"200"}':json,'{"a":"100","b":"200"}':json);
您可以清楚地注意到::json被:json替换,因此出现了错误。
我怎样才能纠正这个问题?
谢谢。
1条答案
按热度按时间woobm2wo1#
这不是一个理想的解决方案,但您可以使用以下方法:
基本上,您告诉hibernate冒号不能被解释为参数名。或者,您可以使用标准的sql cast
CAST(:a as json)