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的方法或不是动态的:
谓词或(谓词…限制)
思想?样品?

最佳答案

在您的例子中,我宁愿使用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 - 从多个表中检索信息

javascript - 使用tunnock.js的动态可观察量

c# - 动态Linq选择语句

java - 使用NEW时在JPQL中投射

java - 将参数传递给Java中的方法

java - 通过互联网保存Java属性

java - 如何查看我的数据库H2的数据,为什么localhost:8080 / h2控制台不起作用?

java - 创建添加实体时发生异常

java - Intellij IDEA中的检查和描述清单?

javascript - 使用HTML或CSS调整动态徽标的大小