0

我有以下问题。在 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)
}

AShop有许多不同类型的类别,例如Diary,Household等。每个类别可以有多个项目,例如Milk,Cheese等。

它们都是单向关系。

我正在使用休眠事件侦听器来捕获插入/更新/删除后发生的更改。如果我只对每个级别发生的事情感兴趣,那就太好了。例如,如果一个项目的价格发生了变化,从休眠事件,我可以到达项目实体,我会知道价格字段随着项目 id xxx 的变化而变化。

但是,我想将更改关联回Shop级别,以便进行一些有意义的审计跟踪。如果我只更改特定商品的价格,我将在商品级别使用休眠中的 postupdateevent 来获取实体。有没有办法递归地回到这个Shop级别,这样我就可以生成一个审计跟踪(shopId).category(categoryId).price?这样,我会知道,对于价格的特定变化,它是 for whichCategory和 for which Shop

grail 元类或休眠实用程序类是否提供了一种从最底层子级到最顶层父级遍历对象树的方法?

4

1 回答 1

1

如果您没有双向链接,那么您将不得不“从顶部搜索”,可能使用标准

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

这将为您提供一个包含包含currentItem.

于 2013-03-29T19:48:51.747 回答