JPA - 按字符串列表搜索对象

时间:2015-12-09 18:03:44

标签: java jpa orm entity

我有像这样的实体bean:

@ElementCollection
    @CollectionTable(
            name = "example",
            joinColumns = @JoinColumn(name = "test_id")
    )
    private List<String> tests = new ArrayList<>();

我需要找到在列表中至少有一个字符串的对象,如另一个字符串列表中的字符串。 例如: 对象具有列表中的元素&#34;一,二,三&#34; 另一个列表包含元素&#34;一,四,五&#34; 查询应该找到这个对象,因为String&#34; One&#34;在两个列表中。

应该如何查询?

2 个答案:

答案 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