grails - 戈尔姆 : hasMany of the same domain class

标签 grails grails-orm

只是想知道是否有人可以建议域类架构应该如何。我有一个名为类别的域类,但可以有具有相同域(类别)的子类别。例如,设备 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/

相关文章:

testing - Grails 集成测试因 MissingMethodException 而失败

json - 将 JSON 绑定(bind)到嵌套的 Grails 域对象

grails - 代理后面的GGTS 3.4中的设置Grails

Grails 集成测试 : Domain Classes Not Functioning

mysql - 将 grails/groovy 枚举映射到 Mysql 枚举

macos - 加密失败跨平台

postgresql - 针对内存中的 h2 数据源运行 Jasper Reports?

grails - Jenkins 无法运行程序 "Xvfb": java. io.IOException:没有这样的文件或目录

grails - 如何在 grails 中运行一部分 spock 功能测试?

grails - Grails删除双向一对一关联