java - 使用 Criteria API 的动态 JPA 2.0 查询

标签 java dynamic jpa criteria-api jpa-2.0

我在使用 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/

相关文章:

c - 如何在不知道其大小的情况下解除分配不规则的 *** 矩阵?

java - @TableGenerator 可以保存表中最后使用的 id 而不是下一个可用的 id 吗?

java - JOOQ 问题 : AM/A. M. 或 PM/P.M.必需的

从 openOffice 或 Microsoft Office 检查葡萄牙语语法的 Java API

java - 支持 Netbeans 和 Eclipse 用户的 Git 存储库的最佳实践

java - 如何使用 JPA Criteria API 加入不相关的实体

java - JPA或Hibernate生成一个(非主键)列值,不是从1开始

java - 未知 SMTP 主机 : smtp. live.com

c# - 如何通过名称查找访问对象的属性?

javascript - 如何在 VueJs 中动态添加属性