jsonb native Query 中 LIKE 运算符的参数绑定值

Binding values of parameters for LIKE operator inside jsonb native Query

我在使用 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 运算符一起使用并对此进行修补吗?

好的,我发现错误了。

正确的做法是:

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