class Airport {
static mappedBy = [outgoingFlights: 'departureAirport',
incomingFlights: 'destinationAirport']
static hasMany = [outgoingFlights: Route,
incomingFlights: Route]
}
mappedBy
用途
使用 mappedBy
静态属性,您可以控制将关联映射为单向关联还是双向关联,并在双向关联中确定哪些属性形成反向关联。
示例
在此示例中,Airport
类定义两个双向一对多关联。如果不定义 mappedBy
,这是不可能,因为 GORM 无法区分关联另一端两个属性(Route
类中的 departureAirport
或 destinationAirport
)中的哪个属性应与每个一对多关联。
解决方案是定义 mappedBy
,向 Airport
类说明每个关联如何关联到另一端。
class Route {
Airport departureAirport
Airport destinationAirport
}
多对一关系的单独示例
class Person {
String name
Person parent
static belongsTo = [ supervisor: Person ]
static mappedBy = [ supervisor: "none", parent: "none" ]
static constraints = { supervisor nullable: true }
}
说明
Grails 需要知道关联是单向还是双向,如果是双向,则需要知道两端涉及哪些属性。它通常可以推断此信息,但当存在多个类型相同的属性时,它的猜测有时会出错。mappedBy
属性是属性名称对的简单映射,其中键是当前域类中关联属性的名称,值是关联另一端的域类中关联属性的名称(该属性也可能属于自身)。以上示例应澄清此问题。
您还可以在映射中指定值“none”,这表示关联是单向的。但是,如果实际上在目标类中存在域属性名为“none”,此方法将无法奏效!