例子中用Face 和 Nose作关系的例子
一对一有3种情况:
1.Nose作为Face的一个属性保存. 也就是说Nose 相当于 Face的一个内部类.
2.双向关联
3.级联关联
如果在Nose中设置的是
static belongsTo = Face
static belongsTo = [face:Face]
的区别是,前者是单向关联+级联,face可以通过
face.nose
获得Nose,而
nose.face
是没有的,后者有
原文:
引用
One-to-one
A one-to-one relationship is the simplest kind, and is defined trivially using a property of the type of another domain class. Consider this example:
Example A
class Face {
Nose nose
}
class Nose {
}
In this case we have unidirectional one-to-one relationship from Face to Nose. To make this relationship bidirectional define the other side as follows:
Example B
class Face {
Nose nose
}
class Nose {
Face face
}
This is bidirectional relationship. However, in this case no updates are cascading from either side of the relationship.
Consider this variation:
Example C
class Face {
Nose nose
}
class Nose {
static belongsTo = [face:Face]
}
In this case we use the belongsTo setting to say that Nose "belongs to" Face. The result of this is that we can create a Face and save it and the database updates/inserts will be cascaded down to Nose:
new Face(nose:new Nose()).save()
The example above will save both face and nose. Note that the inverse is not true and will result in an error due to a transient Face:
new Nose(face:new Face()).save() // will cause an error
Another important implication of belongsTo is that if you delete a Face instance the Nose will be deleted too:
def f = Face.get(1)
f.delete() // both Face and Nose deleted
Without belongsTo deletes would not be cascading and you would get a foreign key constraint error unless you explicitly deleted the Nose:
// error here without belongsTo
def f = Face.get(1)
f.delete()
// no error as we explicitly delete both def f = Face.get(1) f.nose.delete() f.delete()
You could keep the previous relationship as unidirectional and allow saves/updates to cascade down by doing the following:
class Face {
Nose nose
}
class Nose {
static belongsTo = Face
}
Note in this case because we are not using the map syntax in the belongsTo declaration and explicitly naming the association. Grails will assume it is unidirectional. The diagram below summarizes the 3 examples:
分享到:
相关推荐
GORM是Go语言编写的开源对象关系映射(Object Relational Mapping,简称ORM)库,旨在为Golang开发者提供一个友好且功能齐全的ORM工具。ORM技术允许开发者通过面向对象的方式来操作关系数据库,无需编写大量的SQL...
关联关系包括 Belongs To、Has One、Has Many、Many To Many、Polymorphism 等。 4. CRUD: Reading and Writing Data gorm文档的 CRUD 部分讲解了如何使用gorm库进行数据的读写操作,包括 Create、Query、...
Grails框架中的GORM(Groovy Object Relational Mapping)是利用Groovy语言的优势来简化数据库操作的一套对象关系映射技术。GORM支持多种查询方式,提供了类似于Hibernate的查询能力,并且由于Groovy语言的动态特性...
在IT行业中,GORM是一个非常重要的工具,尤其在Grails框架中,它是处理数据库操作的主要接口。本篇文章将深入探讨GORM的独立启动(Standalone)功能,这使得开发者可以在不依赖整个Grails应用的情况下使用GORM的强大...
《开源项目 Jinzhu-GORM:打造更便捷的数据关系处理》 在当今的软件开发领域,数据库操作是不可或缺的一部分。GORM,由Jinzhu开发的Go语言 ORM(对象关系映射)库,为开发者提供了更为简洁和高效的数据库操作方式。...
首先说明的是,在项目中使用orm的好处很多: 防止直接拼接sql语句引入sql注入漏洞 方便对modle进行统一管理 专注业务,加速开发 坏处也是显而易见的: 开发者与最终的sql语句隔了一层orm,因此可能会...会返回gorm.R
2. **GORM**: GORM是一个强大的ORM库,用于简化Go语言与数据库之间的交互。它可以自动管理数据库表的创建和更新,支持SQL的CRUD操作,以及事务处理。GORM支持多种数据库,如MySQL、PostgreSQL、SQLite等,使得数据库...
《GORM_ADO数据库操作模块详解》 在IT行业中,数据库操作是不可或缺的一部分,而GORM和ADO(ActiveX Data Objects)则是两种广泛使用的数据库访问技术。本篇将深入探讨GORM_ADO数据库操作模块,解析其核心概念、...
go-gen -db-type mysql -user your_user -password your_password -host your_host -port your_port -dbname your_dbname -out path/to/output ``` 这将根据数据库中的表生成相应的Go代码,并将其保存在指定的输出...
Go Web项目框架,如标题所提及的“viper+gin+gorm”,是为初学者提供的一种高效、简洁的开发解决方案。这个框架组合充分利用了Go语言的强项,使其成为构建高性能Web应用的理想选择。让我们逐一深入理解这三个核心...
读书笔记:XSbbs 基于gin + gorm + goredis 实战面向接口开发
panic("failed to connect database") } // 进行数据库迁移、模型定义和其他操作 } ``` **总结** GORM DM8 驱动为 Go 开发者提供了便捷的工具,使他们能够在不增加额外复杂度的情况下利用 GORM 的强大功能来...
GORM是一个非常流行的ORM(对象关系映射)库,它为多种编程语言,包括Go,提供了方便的数据库操作接口。在这个场景中,我们讨论的是一个基于Go语言仿照GORM实现的数据库操作框架的源代码。 首先,GORM的设计目标是...
Bubble 是一个使用 Gin 框架和 Gorm ORM 库开发的练手小项目,旨在帮助开发者熟悉 Gin 和 Gorm 的使用,并实践常见的 Web 开发模式和技术栈。Bubble 是一个简单的网页,用户可以发布任务、浏览任务、更新状态等操作...
Go-GORM是一个在Golang(Go语言)中广泛使用的对象关系映射(ORM)库,它的目标是为开发者提供一个简单、高效的工具,使得数据库操作更加便捷。ORM库允许程序员用面向对象的方式来处理数据库,避免了直接编写SQL语句...
Objective-c 的windows下开发工具。之前你还得装core和sys
易语言GORM_ADO数据库操作模块源码,GORM_ADO数据库操作模块,取易对象错误,刷新属性集,取属性数,取属性信息,取属性信息_v2,置属性信息,置属性信息_v2,取错误数,刷新错误集,清空错误集,取错误信息,是否连接持久文件,...