hibernate生成的查询对于json类型不正确

2fjabf4q  于 2021-07-11  发布在  Java
关注(0)|答案(1)|浏览(371)

我使用一个命名查询来调用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替换,因此出现了错误。
我怎样才能纠正这个问题?
谢谢。

woobm2wo

woobm2wo1#

这不是一个理想的解决方案,但您可以使用以下方法:

list = entityManager.createNativeQuery("select * from transfer_validate(?\\:\\:json,?\\:\\:json);")
        .setParameter(1, jsonString1)
        .setParameter(2, jsonString2)
        .getResultList();

基本上,您告诉hibernate冒号不能被解释为参数名。或者,您可以使用标准的sql cast CAST(:a as json)

相关问题