我在使用 JPA 2.0 的 CriteriaBuilder 构建动态查询时遇到了一些困难。
我猜我有一个很常见的用例:用户提供任意数量的搜索参数 X 和/或连接:像:
select e from Foo where (name = X1 or name = X2 .. or name = Xn )
CriteriaBuilder 的方法或方法不是动态的:
Predicate or(Predicate...限制)
想法? sample ?
最佳答案
在你的情况下,我宁愿使用 Expression#in(Collection)
避免循环和构建复合 Predicate
动态:
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));
您可能想查看 Basic Type-Safe Queries Using the Criteria API and Metamodel API了解更多详情。
关于java - 使用 Criteria API 的动态 JPA 2.0 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2510106/