我有像这样的实体bean:
@ElementCollection
@CollectionTable(
name = "example",
joinColumns = @JoinColumn(name = "test_id")
)
private List<String> tests = new ArrayList<>();
我需要找到在列表中至少有一个字符串的对象,如另一个字符串列表中的字符串。 例如: 对象具有列表中的元素&#34;一,二,三&#34; 另一个列表包含元素&#34;一,四,五&#34; 查询应该找到这个对象,因为String&#34; One&#34;在两个列表中。
应该如何查询?
答案 0 :(得分:1)
@Entity
class Entry {
@ElementCollection
@CollectionTable(name = "example",joinColumns = @JoinColumn(name = "test_id"))
private List<String> tests = new ArrayList<>();
//getter setter.....
}
public List<Entry> getByTests(List<String> tests){
String sql = " SELECT entry FROM Entry entry left join fetch
entry.tests test left join fetch WHERE test in(:tests) ";
Query query = entityManager.createQuery(sql);
query.setParameter("tests",tests);
return query.getResultList();
}
答案 1 :(得分:-2)
Collection.retainAll(Collection c)可能就是您所需要的。它通过删除B中A中未包含的所有元素来改变原始集合,例如:
List<Integer> a = ...; // a = 1,2,3,4,5
List<Integer> b = ...; // b = 1,2,3,4,5,6,7
b.retainAll(a); // returns true, b becomes 1,2,3,4,5