我有以下問題。 Grails中,讓我們說,我有以下關係:如何去從子實體中的Grails父實體與Hibernate
class Shop {
static hasMany = [category: Category]
String name;
.... (additional shop attributes)
}
class Category {
static belongsTo = [Shop]
static hasMany = [item: Item]
String name;
... (additional category attributes)
}
class Item {
static belongsTo = [Category]
String name;
double price;
... (additional item attributes)
}
一個Shop
有許多不同類型的類別,如Diary
,Household
等每個類別可以有多個項目,如Milk
,Cheese
等。
他們都是單向的關係。
我使用Hibernate事件偵聽器捕捉到的變化發生後,插入/更新/刪除。如果我只對每個級別發生的事情感興趣,那就太好了。例如,如果一個商品的價格從休眠事件發生變化,我可以進入商品實體,並且我會知道價格字段隨着商品ID xxx而改變。
不過,我想這樣我就可以做一些有意義的審計跟蹤的更改回Shop
水平相關聯。如果我只爲某個特定項目進行價格更改,那麼在休眠狀態下,我將通過postupdate事件來獲取項目級別的實體。有沒有辦法遞歸地回溯到Shop
的水平,所以我可以生成一個審計跟蹤,如(shopId).category(categoryId).price
?這樣,我就會知道,對於某個價格的某個特定變化,它是爲哪個Category
而哪個爲Shop
。
是否大盤元類或Hibernate工具類提供了這樣的方法,從最底層的孩子遍歷對象樹最頂級的家長嗎?
如果你有雙向鏈接('靜態屬於關聯= [類別:類別]','靜態屬於關聯= [店:店鋪]'),你可以使用'item.category.shop'一個項目得到你的店。包含這些鏈接是否有缺點? –
@BobMcCracken它應該是安全的,但如果你有很多雙向關聯,你需要小心急於加載和延遲加載。如果你不小心,像Item.findByName(「foo」)這樣的簡單查詢最終會將你的整個數據庫加載到內存中...... –