(快速参考)

mappedBy

用途

使用 mappedBy 静态属性,您可以控制将关联映射为单向关联还是双向关联,并在双向关联中确定哪些属性形成反向关联。

示例

在此示例中,Airport 类定义两个双向一对多关联。如果不定义 mappedBy,这是不可能,因为 GORM 无法区分关联另一端两个属性(Route 类中的 departureAirportdestinationAirport)中的哪个属性应与每个一对多关联。

解决方案是定义 mappedBy,向 Airport 类说明每个关联如何关联到另一端。

class Airport {

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

    static hasMany = [outgoingFlights: Route,
                      incomingFlights: Route]
}
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”,此方法将无法奏效!