jsonb本机查询中LIKE运算符的参数绑定值

时间:2019-07-17 17:37:51

标签: spring postgresql jpa jsonb

我在使用LIKE运算符使用Postgres jsonb语法声明参数值并将其绑定到本机查询时遇到问题。

它对于=运算符非常有效,但不适用于LIKE。

这是=运算符的作用:

Query searchQuery = em.createNativeQuery("SELECT * FROM myTable WHERE myJsonBField @> CAST(:param1 as jsonb)", MyEntity.class);
searchQuery.setParameter("param1","{\"attribute\":\"value\"}");
List<MyEntity> queryResult = searchQuery.getResultList();

这就是我要与LIKE运算符一起做的事情

Query searchQuery = em.createNativeQuery("SELECT * FROM myTable WHERE myJsonBField --> 'attribute' LIKE :param1", MyEntity.class);
searchQuery.setParameter("param1","'%value%'");
List<MyEntity> queryResult = searchQuery.getResultList();

例外是:

org.springframework.dao.InvalidDataAccessApiUsageException: Unknown parameter name : param1; nested exception is java.lang.IllegalArgumentException: Unknown parameter name : param1

任何人都知道如何在LIKE运算符中使用参数并将其修补吗?

1 个答案:

答案 0 :(得分:0)

好的,我发现了错误。

正确的方法是:

Query searchQuery = em.createNativeQuery("SELECT * FROM myTable WHERE myJsonBField->> 'attribute' LIKE :param1", MyEntity.class);
searchQuery.setParameter("param1","'%value%'");
List<MyEntity> queryResult = searchQuery.getResultList();