JPA查询比较列表

时间:2013-04-18 15:37:47

标签: java jpa criteria-api

假设我有一个这样的实体:

public class Class1 {

private long id;
    ...
private List<OneRandomObject> list;
}

是否可以在JPA中使用条件查询或命名查询来比较实体的列表?

类似于命名查询:

select c from Class1 c where c.list=:list

使用条件api的查询也可以正常工作。

2 个答案:

答案 0 :(得分:2)

我不确定这是否符合您的情况,但这不符合您的要求吗?

    public List<Class1> matchList(List<OneRandomObject> other) {
        // ...
        String jpql = "select c from Class1 c where c.list in (:other)"
        // ...
    }

我现在看到你在问什么。在Hibernate Criteria API中如何做到这一点?

    Criteria crit = session.createQuery(Class1.class);

    Conjunction junction = Restrictions.conjunction();

    for(OneRandomObject o: matches) {
        junction.add(Restrictions.propertyEq("list", o);
    }

    crit.add(junction);

答案 1 :(得分:1)

据我所知,将整个集合过滤为财产是不可能的。

也许您可以尝试根据条件获取所有Class1和the list,并按如下方式过滤结果:

for(Class1 c1 : class1List)
{
    List<OneRandomObject> list = c1.getList();
    // compare the list with you param
    // remove if not match
}