需要对 Appliance 域类进行小调整。猜一下!!:)
我们不需要Appliance
for中的 hasMany 关系categories
。关系是这样的:
Category --> SubCategory (type of Category) --> Appliance
一个设备belongsTo
是父类以及subCategory
它Category
本身。因此,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'}
如果还不清楚,请告知。