假设我有一个这样的实体:
public class Class1 {
private long id;
...
private List<OneRandomObject> list;
}
是否可以在JPA中使用条件查询或命名查询来比较实体的列表?
类似于命名查询:
select c from Class1 c where c.list=:list
使用条件api的查询也可以正常工作。
答案 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
}