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();
我在使用 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();