我在使用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运算符中使用参数并将其修补吗?
答案 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();