我有点卡住了使用 JPA 2.0 的 CriteriaBuilder 构建动态查询。
我猜我有一个很常见的用例:用户提供任意数量的搜索参数 X 来连接和/或连接:比如:
select e from Foo where (name = X1 or name = X2 .. or name = Xn )
CriteriaBuilder 的 Method or 不是动态的:
谓词或(谓词...限制)
想法?样品?
我有点卡住了使用 JPA 2.0 的 CriteriaBuilder 构建动态查询。
我猜我有一个很常见的用例:用户提供任意数量的搜索参数 X 来连接和/或连接:比如:
select e from Foo where (name = X1 or name = X2 .. or name = Xn )
CriteriaBuilder 的 Method or 不是动态的:
谓词或(谓词...限制)
想法?样品?
在您的情况下,我宁愿使用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));
您可能需要检查使用 Criteria API 和 Metamodel API 的基本类型安全查询以获取更多详细信息。
在此代码中 Foo_.name 将给出编译错误。由于该字段未在其中声明。我无法理解这一点。请给我建议。
-拉古