只是想知道是否有人可以建议域类架构应该如何。我有一个名为类别的域类,但可以有具有相同域(类别)的子类别。例如,设备 toastr 可以位于“厨房”类别、“小家电”子类别下。
class Category {
static hasMany = [appliances: Appliance, categories: Category]
String name
}
class Appliance {
static belongsTo = Category
static hasMany = [categories: Category]
}
最佳答案
Appliance 域类需要进行一些小调整。猜一下!! :)
对于类别
,我们不需要Appliance
中的hasMany 关系。关系是这样的:
Category --> SubCategory (type of Category) --> Appliance
设备属于
父类别以及subCategory
,而subCategory
本身也是一个Category
。所以在Appliance中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'}
如果仍不清楚,请告知。
关于grails - 戈尔姆 : hasMany of the same domain class,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15960387/