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」的網域名稱屬性,這將無法使用!