GORM mappedBy和映射差异

Mor*_*ive 2 grails grails-orm

在GORM之间有什么区别mappedBymapping

static mapping = {
...
}

static mappedBy = {
...
}
Run Code Online (Sandbox Code Playgroud)

Phi*_*lMr 8

映射
mapping只是告诉GORM将一个或多个Domain属性显式映射到特定的数据库列.

class Person {
   String firstName

   static mapping = {
      table 'people'
      id column: 'person_id'
      firstName column: 'First_Name'
   }
}
Run Code Online (Sandbox Code Playgroud)

在这种情况下,例如我指示GORM将id属性映射到表的列person_id,将 属性映射到同一个表的列.peoplefirstNameFirst_Name

mappedBy
mappedBy允许您控制类关联的单向性或双向性.从Grails文档:

class Airport {
   static mappedBy = [outgoingFlights: 'departureAirport',
                   incomingFlights: 'destinationAirport']

   static hasMany = [outgoingFlights: Route,
                  incomingFlights: Route]
}

class Route {
    Airport departureAirport
    Airport destinationAirport
}
Run Code Online (Sandbox Code Playgroud)

Airport定义了两个双向一对多关联.如果不指定mappedBy,你会得到一个错误,因为格姆不能推断其在关联的另一端的两个属性(或departureAirportdestinationAirport)每一个一对多应关联.

在此输入图像描述

换句话说,它可以帮助您消除双向关联带来的歧义.