2013-02-01 20 views
2

让我们想象一下,我有一些产品实体的标签java.List,为blelow:搜索实体,其中列表包含在Java列表中的任何值冬眠

@Entity 
public class Product impements Serializable{ 
    ... 
    private List<String> tags; 
} 

,我有用户想要搜索对于标签(例如)由任何标签标记的产品:汽车,摩托车,飞机。

因此,当涉及到搜索时,我有我的实体中的标签列表和搜索标签列表,其中我需要的是我的产品标签列表中至少有一个标签。我不知道如何编写这样的查询。 THX的帮助

回答

2

之前beny23发布了他的解决方案,我通过添加

SELECT p FROM Product p, IN (p.tags) t where t in (:searchList) 

但他的回答也是正确的。

0

尝试这样:

@Entity 
public class Product implements Serializable{ 
    ... 
    private List<String> tags; 

    public boolean contains(List<String> inputTags) { 
     for (String tag : inputTags) { 
      if(tags.contains(tag)){ 
       return true;     
      } 
     } 
     return false; 
    } 
} 

,或者你可以做2的foreach,并使用

if(inputTag.equals(productTag)) return true; 
+0

不会在数据库中使用hibernate搜索它,但thx回答 – Misiakw

3

为此,您可以使用下面的HQL查询:

session.createQuery("from Product p join p.tags t where t = :tag") 
     .setString("tag", tagToSearchFor)