在GORM之间有什么区别mappedBy和mapping?
static mapping = {
...
}
static mappedBy = {
...
}
Run Code Online (Sandbox Code Playgroud)
映射
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,你会得到一个错误,因为格姆不能推断其在关联的另一端的两个属性(或departureAirport或destinationAirport)每一个一对多应关联.

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