如何使用hibernate从grails中的子实体到达父实体

时间:2013-03-29 18:59:50

标签: hibernate grails

我有以下问题。在grails中,假设我有以下关系:

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有许多不同类别的类别,例如DiaryHousehold等。每个类别可以包含多个项目,例如Milk,{{1等等。

它们都是单向关系。

我正在使用hibernate事件监听器来捕获插入/更新/删除后发生的更改。如果我只对每个级别的事情感兴趣,那就太好了。例如,如果物品的价格发生变化,从休眠事件中,我可以到达物品实体,我将知道价格字段已更改为物品ID xxx。

但是,我想将更改关联回Cheese级别,以便我可以进行一些有意义的审计跟踪。如果我只对特定项目进行价格更改,我将在项目级别使用hibernate中的postupdateevent获取实体。有没有办法以递归方式遍历Shop级别,以便生成像Shop这样的审计跟踪?通过这种方式,我知道,对于价格的特定变化,(shopId).category(categoryId).priceCategory为{。}}。

grail元类或hibernate实用程序类是否提供了从最底层子节点到最顶层父节点遍历对象树的方法?

1 个答案:

答案 0 :(得分:1)

如果您没有双向链接,则必须“从顶部搜索”,可能使用标准

def shops = Shop.withCriteria {
  category {
    item {
      idEq(currentItem.id)
    }
  }
}

这会为您提供包含currentItem类别的所有商店的列表。