2

只是想知道是否有人可以建议域类模式应该如何。我有一个名为 Category 的域类,但可以有具有相同域(Category)的子类别。例如,电器烤面包机可以在厨房类别下,小电器子类别下。

class Category {
   static hasMany = [appliances: Appliance, categories: Category] 
   String name
}

class Appliance {
   static belongsTo = Category
   static hasMany = [categories: Category]
}
4

1 回答 1

3

需要对 Appliance 域类进行小调整。猜一下!!:)

我们不需要Appliancefor中的 hasMany 关系categories。关系是这样的:

Category --> SubCategory (type of Category) --> Appliance

一个设备belongsTo是父类以及subCategoryCategory本身。因此,belongsTo 关系在设备中就足够了。

改为使用:

class Appliance {
   static belongsTo = Category
   String name
}

class Category {
    String name
    static hasMany = [appliances: Appliance, subCategories: Category]
}

这是一个可以更好地理解事物的测试用例:

//Category
def kitchen = new Category(name: "Kitchen")
kitchen.save()

//Appliance
def toaster = new Appliance(name: "Toaster")
kitchen.addToAppliances(toaster)
kitchen.save()

//Sub Categories
def electrical = new Category(name:  "Electrical")
//Electrical category is a sub category of Kitchen
kitchen.addToSubCategories(electrical)

//Toaster is an appliance of Category Kitchen and Sub Category Electrical
electrical.addToAppliances(toaster)
kitchen.save()

assert kitchen
assert toaster
assert electrical

assert kitchen.appliances.size() == 1
kitchen.appliances.each{assert it.name == 'Toaster'}

assert kitchen.subCategories.size() == 1
kitchen.subCategories.each {assert it.name == 'Electrical'}

assert electrical.appliances.size() == 1
electrical.appliances.each {assert it.name == 'Toaster'}

如果还不清楚,请告知。

于 2013-04-12T02:18:16.983 回答