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)
}

には、 、Shopなど、さまざまな種類のカテゴリがあります。各カテゴリには、、 などの複数のアイテムを含めることができます。DiaryHouseholdMilkCheese

それらはすべて一方向の関係です。

挿入/更新/削除後に発生する変更をキャプチャするために、休止状態のイベント リスナーを使用しています。各レベルで何が起こっているのかだけに興味があるなら、それは素晴らしいことです。たとえば、休止状態のイベントからアイテムの価格が変更された場合、アイテム エンティティにアクセスでき、価格フィールドがアイテム ID xxx で変更されていることがわかります。

Shopただし、意味のある監査トレースを実行できるように、変更をレベルに関連付けたいと思います。特定のアイテムの価格変更のみを行う場合、休止状態で postupdateevent を使用してアイテム レベルでエンティティを取得します。Shop次のような監査証跡を生成できるように、再帰的にレベルに戻る方法はあり(shopId).category(categoryId).priceますか? このようにして、価格の特定の変化について、それがどのためでCategoryあり、どのためであるかを知ることができShopます。

grail メタクラスまたは hibernate ユーティリティ クラスは、オブジェクト ツリーを最下位の子から最上位の親までトラバースする方法を提供しますか?

4

1 に答える 1

1

双方向リンクがない場合は、おそらく基準を使用して、「上から検索」する必要があります

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

これにより、 を含むカテゴリを持つすべてのショップのリストが表示されますcurrentItem

于 2013-03-29T19:48:51.747 に答える