2011-11-10 40 views
1

,我有以下的ItemController.groovy一段代碼訪問自動生成的字段和查詢

def list = { 
    params.max = 60 
    def storeYYId = params.id 

     [itemInstanceList: Item.list(params), itemInstanceTotal: Item.count()] 
} 

我在Item.groovy如下:

class Item { 
    String itemName 
    static belongsTo = [store:Store] 


    static constraints = { 
     itemName(blank:false) 
     storeId() 
    } 
} 

這給了我,因爲一個錯誤它告訴我沒有storeId屬性,但是存在,因爲store_id是相應數據庫中Store表的外鍵。

問題1。我該如何告訴Grails讓我訪問GORM自動生成的域的屬性,如本例中的id和storeId?

Question2。我應該在我的列表動作的ItemController.groovy中寫入哪些代碼,以便僅檢索storeId == storeYYId的項目列表?

回答

4

問題1。如何告訴Grails讓我訪問GORM自動生成的 域的屬性,如 這種情況下的id和storeId?

你應該能夠在您訪問您定義的屬性來訪問完全相同的方式自動生成的屬性。您收到錯誤的原因是因爲Grails不會自動生成Item類的storeId屬性,它將自動生成的唯一屬性是versionid(對於ItemStore)。

Question2。我應該使用我的 列表操作在我的ItemController.groovy中寫入哪些代碼,以便只檢索 storeId == storeYYId的項目列表?

您需要編寫HQL或條件查詢來檢索這些項目。該標準查詢將看起來像這樣(未經)

// Get all items that have storeId = 6 
def storeId = 6 

def items = Item.withCriteria { 
    store { 
     eq('id', storeId) 
    } 
} 
+0

也簡單做Item.findAllByStore(Store.get(STOREID)) – Gregg

+0

@Gregg該解決方案是絕對簡單的,但我相信它會導致兩個查詢被髮布,我想避免 –

+0

當然。不過,get()總是試圖從緩存中取出。所以命中可能可以忽略不計。我想你也可以完成Item.findAllByStore(Store.load(storeId)),這就足夠了,甚至不需要去緩存。 – Gregg