Grails 4中的多对多关联

时间:2019-12-11 23:14:42

标签: grails many-to-many gorm

我正在使用Grails 4.0.1进行新项目。在此项目中,我有两个域类,第一个是Person,第二个是Document。这些类之间存在多对多关联。但是,我还需要在每个文档中存储每个人的顺序(位置)。在Grails 4中有什么方法可以对这种行为进行建模吗?

2 个答案:

答案 0 :(得分:0)

您必须将Document.persons定义为List

class Document {
  List<Person> persons
  static hasMany = [ persons:Person ]
}

class Person {
  static hasMany = [ documents:Document ]
}

有关更多信息,请参见ref-doc

答案 1 :(得分:0)

几个小时后,我得到了更适合我的用例的解决方案。这是解决方案:

  1. 我们创建两个基类:PersonDocument

    class Person {
    
    String name
    
    static hasMany = [documentPerson: DocumentPerson]
    
    static constraints = {
        name blank: false, nullable: false, maxSize: 255
        documentPerson nullable: true
      }
    }
    
    class Document {
    
    String title
    
    static hasMany = [documentPerson: DocumentPerson]
    
    static mapping = {
        tablePerHierarchy false
    }
    
    static constraints = {
        title blank: false, maxSize: 255, nullable: true
        documentPerson nullable: true
     }
    }
    

接下来,我们定义类DocumentPerson

    class DocumentPerson {

    Integer position
    Person person
    Document document

    static constraints = {
        position nullable: false
        document nullable: false
        person nullable: false
     }
   }

这时,我们在数据库中有了三个表。