다음 질문이 있습니다.최대 절전 모드 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 유틸리티 클래스가 객체 트리를 가장 하위의 하위에서 가장 상위의 부모로 트래버스하는 방법을 제공합니까?
양방향 링크 ('static belongsTo = [category : Category]','static belongsTo = [shop : Shop]')를 사용하면'item.category.shop'을 사용하여 아이템을 얻을 수 있습니다. 이러한 링크를 포함 할 때 단점이 있습니까? –
@BobMcCracken 안전해야하지만 많은 양방향 연관이있는 경우 열렬한 대 지연로드에주의해야합니다. 'Item.findByName ("foo")'와 같은 간단한 쿼리가 전체 데이터베이스를 메모리에로드하는 것을 조심하지 않으면 ... –