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会自动级联的。

posted on   黑暗伯爵  阅读(1233)  评论(0编辑  收藏  举报

编辑推荐:
· 如何编写易于单元测试的代码
· 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的设计模式综述

导航

< 2012年7月 >
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31 1 2 3 4
5 6 7 8 9 10 11

统计

点击右上角即可分享
微信分享提示