Grails Domain的關系
orm樣式的Domain最終會在數據庫表中體現出來,Domain類的從屬關系會以數據庫關聯映射來體現。
一對多/多對一
---
__示例__:
Class Country:
[pk] +id
+name
Class Province:
[pk] +id
+name
[fk]-> +country
`Country`國家 可以擁有多個省份,就國家與省份來說,是__一對多__的關系
`Province`省份 只能屬于一個國家,`country`標明它所屬的國家,為外鍵,就省份與國家來說,是__多對一__的關系
__Grails Domain__:
class Country {
String name
//一對多,hasMany,是一個字典集合
static hasMany = [province:Province]
}
class Province {
String name
//多對一,字典集合
static belongsTo = [country:Country]
}
帶碼中兩個domian互相說明了自己在一對多/多對一中的關系,這樣在進行各種CRUD操作時,grails會幫我們進行級聯操作
多對多
---
__示例__:
Class City:
[pk] +id
+name
Class Road:
[pk] +id
+name
Class City-Road:
[pk] +id
[fk]-> +city
[fk]-> +road
`City` 城市可以有多個公路
`Road` 一條公路可以橫穿多個城市
多對多關系中,一般會額外用一個表來記錄映射關系
__Grails Domain__:
class City {
String name
//多對多
static hasMany = [province:Province]
}
class Road {
String name
//多對多
static hasMany = [city:City]
//belongsTo最重要的作用是綁定級聯操作
//在這里,單獨對road進行操作,不會影響到city
//如果對road的屬主city進行操作,勢必會級聯影響到road
static belongsTo = [Country] //這里不是字典了,而是個列表,因為這樣不會創建某個字段,只是將逐漸綁定
}
在多對多關系中,如果考慮了級聯操作,最重要的是要定義好主從關系,即以哪個表為主
這樣的代碼,生成腳手架后,crud會自動級聯的。
浙公網安備 33010602011771號