使用Criteria API进行动态JPA 2.0查询
我使用JPA 2.0的CriteriaBuilder构建动态查询有点困难。
我猜有一个很常见的用例:用户提供任意数量的搜索参数X和/或连接:如:
select e from Foo where (name = X1 or name = X2 .. or name = Xn )
方法或CriteriaBuilder不是动态的:
谓词或(谓词……限制)
想法? 样品?
在您的情况下,我宁愿Expression#in(Collection)
使用Expression#in(Collection)
来避免循环并动态构建复合Predicate
:
CriteriaBuilder cb = em.getCriteriaBuilder(); CriteriaQuery cq = cb.createQuery(Foo.class); Metamodel m = em.getMetamodel(); EntityType Foo_ = m.entity(Foo.class); Root foo = cq.from(Foo_); cq.where(my.get(Foo_.name).in(params));
您可能需要使用Criteria API和Metamodel API检查基本类型安全查询以获取更多详细信息。
在此代码中,Foo_.name将提供编译错误。 由于该领域未在此声明。 我无法理解这一点。 请建议我。
-raghu