2013-03-29 2 views
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 각 범주는 여러 항목을 가질 수 등 Diary, Household, 같은 종류의 많은 다른 유형을 가지고 같은 Milk, Cheese 등 : Grails의에서의 나는 다음과 같은 관계가 있다고 가정 해 보자

이들은 모두 단방향 관계입니다.

최대 절전 모드 이벤트 수신기를 사용하여 삽입/업데이트/삭제 후 변경 사항을 캡처하고 있습니다. 각 레벨에서 일어나는 일에만 관심이 있다면 대단합니다. 예를 들어, 항목의 가격이 최대 절전 모드 이벤트에서 변경된 경우 항목 엔티티에 연결할 수 있으며 품목 ID xxx로 가격 필드가 변경되었음을 알 수 있습니다.

그러나 의미있는 감사 추적을 수행 할 수 있도록 변경 사항을 다시 Shop 수준과 연결하고 싶습니다. 특정 항목에 대해서만 가격 변경을하면 최대 절전 상태의 사후 업데이트와 함께 항목 수준에서 항목을 보류합니다. 반복적으로 Shop 레벨로 돌아가서 (shopId).category(categoryId).price과 같은 감사 추적을 생성 할 수 있습니까? 이 방법으로, 나는 가격의 특정 변화에 대해 어느 것이 든 Category이고 그 중 어떤 것이 Shop 인 것을 알 것입니다.

grail metaclass 또는 hibernate 유틸리티 클래스가 객체 트리를 가장 하위의 하위에서 가장 상위의 부모로 트래버스하는 방법을 제공합니까?

답변

1

그런 다음 양방향 링크가없는 경우 당신은 아마이 당신에게 카테고리를 가지고 모든 상점의 목록을 줄 것이다 기준

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

를 사용하여, "정상에서 검색"할 것이다 currentItem을 포함합니다.

+0

양방향 링크 ('static belongsTo = [category : Category]','static belongsTo = [shop : Shop]')를 사용하면'item.category.shop'을 사용하여 아이템을 얻을 수 있습니다. 이러한 링크를 포함 할 때 단점이 있습니까? –

+0

@BobMcCracken 안전해야하지만 많은 양방향 연관이있는 경우 열렬한 대 지연로드에주의해야합니다. 'Item.findByName ("foo")'와 같은 간단한 쿼리가 전체 데이터베이스를 메모리에로드하는 것을 조심하지 않으면 ... –

관련 문제