Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JPA CriteriaBuilder类值列_Java_Jpa_Eclipselink_Criteria Api - Fatal编程技术网

Java JPA CriteriaBuilder类值列

Java JPA CriteriaBuilder类值列,java,jpa,eclipselink,criteria-api,Java,Jpa,Eclipselink,Criteria Api,我试图使用CriteriaBuilder创建一个查询,其中需要一个谓词,谓词的值与数据库中的值相似 基本上,我需要能够做到以下几点: 其中myTestValue类似于columnValue 在本机查询中,这是一个选项,但是使用CriteriaBuilder或NamedQueries,它似乎不起作用 String myValue = "foo@bar.com"; cb.where(cb.like(myValue, root.get(Entity_.email)); JPA有这样做的选择吗?或者我

我试图使用CriteriaBuilder创建一个查询,其中需要一个谓词,谓词的值与数据库中的值相似

基本上,我需要能够做到以下几点:
其中myTestValue类似于columnValue

在本机查询中,这是一个选项,但是使用CriteriaBuilder或NamedQueries,它似乎不起作用

String myValue = "foo@bar.com";
cb.where(cb.like(myValue, root.get(Entity_.email));
JPA有这样做的选择吗?或者我应该回到本机查询吗

编辑
我需要能够检查给定的值是否匹配数据库中的通配符条目。因此数据库有一条记录
%@bar.com%
,我需要检查我的给定值是否
foo@bar.com
与该记录匹配。

我认为您的参数应该反过来:

cb.where(cb.like(root.get(Entity_.email),myValue);
另外,您可能需要使用将此添加到第二个参数:

cb.where(cb.like(root.get(Entity_.email),"%"+myValue+"%");

克里斯找到了答案。首先,我需要“生成”一个参数

ParameterExpression<String> senderEmailParameter = cb.parameter(String.class, "senderEmailParameter");
Path<String> senderEmailPath = root.get(Entity_.senderEmail);

Predicate predEmail = cb.like(senderEmailParameter, senderEmailPath);

这管用!谢谢你,克里斯

可能您忘记了在测试字符串的开头和结尾添加“%”?是否有任何错误?或者它就是不工作..它就是不编译。JPA不喜欢这样做;)显示它抱怨什么。您也可以首先尝试JPQL来验证它是否在那里工作。如果它不喜欢该字符串,请尝试将其作为参数传入cb.where(cb.like(cb.parameter(string.class,“myValueParameter”)、root.get(Entity_u2;.email));然后在query.setParameter(“myValueParameter”,myValue)中设置该参数;我需要它们按此顺序排列。我需要检查给定的电子邮件地址是否与数据库中的通配符条目匹配。发现类似的问题可能会有所帮助。这只是如何实现
的一个示例,其中columnValue类似于myTestValue
,我需要它,反之亦然
在myTestValue类似于columnValue
的地方,我将尝试进行一些测试sts稍后将在一些实时环境中运行。您是否使用JPA 2.1?和EclispeLink版本?这不是问题的答案。这是针对类列值的。这对我使用JPA、hibernate和spring boot 2.1.9非常有效,谢谢!
q.where(predEmail);

return em.createQuery(q).setParameter("senderEmailParameter", senderEmail).getSingleResult();