现在的位置: 首页 > 综合 > 正文

Grails Domain的关系

2012年01月30日 ⁄ 综合 ⁄ 共 953字 ⁄ 字号 评论关闭
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会自动级联的。

抱歉!评论已关闭.