3

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

public class Class1 {

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

是否可以在 JPA 中使用标准查询或命名查询按列表比较实体?

类似于命名查询:

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

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

4

2 回答 2

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);
于 2013-04-19T13:21:07.897 回答
1

据我所知,不可能将整个集合过滤为属性。

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

for(Class1 c1 : class1List)
{
    List<OneRandomObject> list = c1.getList();
    // compare the list with you param
    // remove if not match
}
于 2013-04-18T16:05:08.817 回答