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会自动级联的。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· [AI/GPT/综述] AI Agent的设计模式综述