Java 使用CriteriaAPI的动态JPA2.0查询

Java 使用CriteriaAPI的动态JPA2.0查询,java,dynamic,jpa,criteria-api,jpa-2.0,Java,Dynamic,Jpa,Criteria Api,Jpa 2.0,我对使用JPA2.0的CriteriaBuilder构建动态查询有点迟钝 我想,我有一个非常常见的用例:用户提供任意数量的搜索参数X,以进行和/或连接:例如: select e from Foo where (name = X1 or name = X2 .. or name = Xn ) CriteriaBuilder的方法或参数不是动态的: 谓词或(谓词…限制) 想法?示例?在您的情况下,我宁愿使用,以避免循环和动态构建复合: CriteriaBuilder cb = em.getCrit

我对使用JPA2.0的CriteriaBuilder构建动态查询有点迟钝

我想,我有一个非常常见的用例:用户提供任意数量的搜索参数X,以进行和/或连接:例如:

select e from Foo where (name = X1 or name = X2 .. or name = Xn )
CriteriaBuilder的方法或参数不是动态的:

谓词或(谓词…限制)


想法?示例?

在您的情况下,我宁愿使用,以避免循环和动态构建复合:

CriteriaBuilder cb = em.getCriteriaBuilder();

CriteriaQuery<Foo> cq = cb.createQuery(Foo.class);
Metamodel m = em.getMetamodel();
EntityType<Foo> Foo_ = m.entity(Foo.class);
Root<Foo> foo = cq.from(Foo_);
cq.where(my.get(Foo_.name).in(params));
CriteriaBuilder cb=em.getCriteriaBuilder();
CriteriaQuery cq=cb.createQuery(Foo.class);
元模型m=em.getMetamodel();
EntityType Foo_uum=m.entity(Foo.class);
根foo=cq.from(foo_u2;);
cq.where(my.get(Foo_.name).in(params));

您可能需要查看更多详细信息。

在这段代码中,Foo\uu.name将给出编译错误。因为该字段未在其中声明。我无法理解这一点。请推荐我


-raghu

上述示例基于持久性单元的托管类的元模型(可以使用JPA实现提供的注释处理器生成)。但是,请不要在现有线程中发布问题作为答案,而是打开一个新问题。嗨,Pascal Thivent,如果参数是子查询,如何编写代码?