2014-03-27 20 views
0

我的問題是,我有一個類,如:是否有休眠的標準涵蓋任何標準包含名單的條件

@Entity 
public class Product{ 
@Id 
String id; 
String name; 
@ManyToMany 
List<Tag> tags; 
} 

@Entity 
public class Tag{ 
@Id 
String id; 
String name; 
} 

我要搜索產品的標準像,但reversive爲:

session.createCriteria(Product.class).add(
    Restrictions.and(
     Restrictions.like("name",name+"%"), 
     Restrictions.contains("tags",tag)).list(); 

但顯然Restrictions.contains不存在。我只能通過HQL查詢找到解決方案,但我不想(實際上不能)編寫HQL查詢。

有什麼辦法來處理這與標準?

回答

1

我會用createAlias等做只是加入協會一個簡單的比較:

session.createCriteria(Product.class) 
    .createAlias("tags", "tag") 
    .add(Restrictions.eq("tag", tag)) 
    .list() 
+1

別名按預期工作,除了當我使用你的代碼時出錯,但是當我編寫爲.add(Restrictions.eq(「tag.id」,tag.getId())時,它工作正常 – bdogru

0

您是否在尋找Restrictions.in(String propertyName, Collection values)?在章節15.2。縮小結果集,你會發現一個例子:

List cats = sess.createCriteria(Cat.class) 
    .add(Restrictions.not(Restrictions.in("name", new String[] { "Fritz", "Izi", "Pk" }))) 
    .add(Restrictions.disjunction()) 
    .list(); 
+0

不,我在尋找的正好相反的「 Restrictions.in」。我知道什麼是和如何知道它。 – bdogru

+0

我添加了Restrictions.not(Restrictions.in(「name」,new String [] {「Fritz」,「Izi」,「Pk」})) – Harmlezz

+0

很明顯,我沒有提出我的觀點。我的域名產品有一個標籤列表,我想獲取所有包含tagList的產品。 – bdogru