我有点用SturtyBoolean构建动态查询。使用Criteria API的动态JPA 2.0查询
我有相当常见的用途情况下,我想:用户提供的搜索参数X的任意的量为和/或级联:像:
select e from Foo where (name = X1 or name = X2 .. or name = Xn)
方法或CriteriaBuilder的不是动态的:
谓词或(谓语...限制)
想法?样品?
我有点用SturtyBoolean构建动态查询。使用Criteria API的动态JPA 2.0查询
我有相当常见的用途情况下,我想:用户提供的搜索参数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了解更多详情。
在这段代码中Foo_.name会给编译错误。因为该领域没有在那里宣布。我无法理解这一点。请建议我。
-raghu
上述示例基于持久性单元托管类的元模型(可使用JPA实现提供的注释处理器生成)。但是,请不要在现有的主题中发布问题作为答案,而是开个新问题。 – 2010-08-06 09:01:01
嗨,Pascal Thivent,如果params是一个子查询,怎么写代码? – 2010-12-19 15:32:24