首页 > 解决方案 > jsonb原生查询中LIKE运算符的参数绑定值

问题描述

我在使用 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 运算符的参数并对其进行修补?

标签: springpostgresqljpajsonb

解决方案


好的,我发现了错误。

正确的方法是:

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

推荐阅读