2011-07-09 91 views
0

想象我有以下的(這是我的網站的搜索機制)的Grails個createCriteria許多一對多

class Supermarket {  
String sp_name 
String sp_street 
} 

class Products { 
String p_name 
String p_price 
} 

class products_supermarket{ 
Supermarket sp 
Products pro 
} 

現在我想建立一個標準:

def c = Supermarket.createCriteria() 
def results = c.list { 
    like("sp_street", params.street) 
    and { 
     ************ ... params.product 
    } 
    maxResults(10) 

} 

在那裏我有*我希望能夠找到products_supermarket類supermaked搜索產品。怎麼做?

PS。如果標準作爲each()方法工作,遍歷所有超市,我可以使用if-else語句來搜索產品,如果發現我可以使用:idEq(it),其中it是超市ID。這樣我就能做到。我的問題是,我不知道如何獲得當前的超市ID。任何幫助?

回答

2
  1. and應用於審覈規定裏面它,所以沒有把它應用到一個單獨的語句點。頂級標準是and-defauilt。
  2. 通常,您最好不要使用連接器類,只需在域類中使用hasMany: SupermarkethasMany: Product即可。連接器表將由Hibernate自動生成。
  3. 如果您堅持使用ProductsSupermarket連接器類,請將belongsTo: SupermarketbelongsTo: Product添加到它的類中,並將「hasMany:ProductsSupermarket」添加到其他兩個類中,否則您將失去Grails的GORM優勢。
  4. 有一款"Querying Associations" in the doc
  5. 對象的id就這麼簡單:mySupermarket.idmySupermarket.ident()如果鍵字段命名不同。 id字段默認自動添加到類和表中。

所以查詢是:

List<Supermarket> results = Supermarket.withCriteria { 
    like("sp_street", params.street) 
    productSupermarket { 
     product { 
      idEq(params.product) 
     } 
     // or just eq('product', someProduct) 
    } 
    ************ ... params.product 
    maxResults(10) 
}