【发布时间】:2017-07-02 23:38:13
【问题描述】:
我正在尝试使用 CriteriaBuilder 创建一个查询,其中我需要一个谓词,其中谓词的值类似于数据库中的值。
基本上,我需要能够做到以下几点:
WHERE myTestValue LIKE columnValue
在本机查询中,可以选择这样做,但使用 CriteriaBuilder 或 NamedQueries 似乎不起作用。
String myValue = "foo@bar.com";
cb.where(cb.like(myValue, root.get(Entity_.email));
JPA 中是否有这样的选项?还是应该回退到原生查询?
编辑
我需要能够检查给定值是否与数据库中的通配符条目匹配。所以数据库有一条记录%@bar.com%,我需要检查我给定的值foo@bar.com是否与该记录匹配。
【问题讨论】:
-
也许您忘记在测试字符串的开头和结尾添加“%”?
-
您有任何错误吗?或者它只是不起作用..
-
它只是无法编译。 JPA 不喜欢这样做 ;)
-
显示它抱怨的内容。您也可以先尝试 JPQL 来验证它是否可以在那里工作。如果它不喜欢该字符串,请尝试将其作为参数传入 cb.where(cb.like(cb.parameter(String.class, "myValueParameter"), root.get(Entity_.email)); 然后在查询中设置参数 query.setParameter("myValueParameter", myValue);
标签: java jpa eclipselink criteria-api