理解级联更新和删除
有三个需要理解:"belongsTo"设置,谁是控制,谁是所有者
任何一种关系,只要你设置了belongsTo,"update"和"delete"将会从拥有者到被拥有着产生级联。
否着,你就有手动控制这些.
class A { static hasMany = [bees:B] }
class B { static belongsTo = [a:A] }
the cascade strategy is set to "ALL" for the one side and "NONE" for the many side
class A { static hasMany = [bees:B] }
class B { }
In the case of a unidirectional one-to-many where the many side defines no belongsTo then the cascade strategy is set to "SAVE-UPDATE"
class A { static hasMany = [bees:B] }
class B { A a }
the cascade strategy is set to "SAVE-UPDATE" for the one side and "NONE" for the many side
class A { }
class B { static belongsTo = [a:A] }
In the case of a unidirectional one-to-one association that defines a belongsTo then the cascade strategy is set to "ALL" for the owning side of the relationship (A->B) and "NONE" from the side that defines the belongsTo (B->A)
第一节.One-One
有三种关联描述
A.Face----->Nose
B.Face<---->Nose
C.Face<-----Nose
------->
belongsTo
代码实现
A.
class Face {
Nose nose
}
class Nose {
}
关系:单向连接。
B.
class Face {
Nose nose
}
class Nose {
Face face
}
关系:双向连接。
操作:任何一边操作Update不会影响到两个
C.
class Face {
Nose nose
}
class Nose {
static belongsTo = [face:Face]
}
关系:使用belongsTo的双向关联,控制权在Face上。
操作:更新,添加,删除Face操作将会影响到Nose
问题:Nose这些操作结果是什么了?
建议:采用单向连接,并使用belongsTo明确关系。
第二节:one-to-many
代码:
class Author {
static hasMany = [ books : Book ] String name
}
class Book {
String title
}
关系:单向一对多 table方式:连接表,或者可以用ORM DSL使用外键连接
抓取机制“lazy”延迟加载,问题,会产生n+1问题
def a = Author.get(1)a.books.each {
println it.title
}
代码
class Author {
static hasMany = [ books : Book ] String name
}
class Book {
static belongsTo = [author:Author]
String title
}
默认的级联只会有Update,Save方法,
除非加入belongsTo
static mappedBy = [flights:"departureAirport"]
第三节 many to many
代码
class Book {
static belongsTo = Author
static hasMany = [authors:Author]
String title
}
class Author {
static hasMany = [books:Book]
String name
}
控制权在Author,author有责任持久这种关系,而且,只有author能够产生级联across。
new Book(name:"Groovy in Action")
.addToAuthors(new Author(name:"Dierk Koenig"))
.addToAuthors(new Author(name:"Guillaume Laforge"))
.save()
注意这段代码是只会添加Book.
建议:和hibernate的级联机制一样。
组合compositon
class Person {
Address homeAddress
Address workAddress
static embedded = ['homeAddress', 'workAddress']
}
class Address {
String number
String code
}
这里面只会有一张表
继承
class Content {
String author
}
class BlogEntry extends Content {
URL url
}
class Book extends Content {
String ISBN
}
class PodCast extends Content {
byte[] audioStream
}
持久化的基础知识:
有一关键点要记住Grails本质是使用hibernate做持久化。
Grails自动绑定一个hibernate session 给现在执行的请求。
Saving和updating
def p = Person.get(1)
//不用加入事物代码,由Grails自动完成
p.save()
flush方法
def p=Person.get(1)
p.delete(flush:true)
p.save(flush:true)
批处理
Customer.executeUpdate("delete Customer c where c.name =
ldName", [oldName:"Fred"])
分享到:
相关推荐
开源项目-jinzhu-gorm#association-mode.zip,Even easier to handle relationships, try out gorm's Association Mode
GORM是Go语言编写的开源对象关系映射(Object Relational Mapping,简称ORM)库,旨在为Golang开发者提供一个友好且功能齐全的ORM工具。ORM技术允许开发者通过面向对象的方式来操作关系数据库,无需编写大量的SQL...
这个开源项目,"jinzhu-gorm",旨在通过其独特的Association Mode,进一步简化数据库关联的操作,让开发者能够更加专注于业务逻辑,而不是繁琐的SQL编写。 GORM的核心理念是提供一种易于理解和使用的接口,使得Go...
Grails框架中的GORM(Groovy Object Relational Mapping)是利用Groovy语言的优势来简化数据库操作的一套对象关系映射技术。GORM支持多种查询方式,提供了类似于Hibernate的查询能力,并且由于Groovy语言的动态特性...
gorm文档_英文.pdf gorm文档是Golang语言中一个功能强大的ORM(Object-Relational Mapping)库,旨在提供简洁、灵活的数据库交互方式。下面是gorm文档的知识点总结: 1. Getting Started with GORM gorm文档的...
在IT行业中,GORM是一个非常重要的工具,尤其在Grails框架中,它是处理数据库操作的主要接口。本篇文章将深入探讨GORM的独立启动(Standalone)功能,这使得开发者可以在不依赖整个Grails应用的情况下使用GORM的强大...
2. **GORM**: GORM是一个强大的ORM库,用于简化Go语言与数据库之间的交互。它可以自动管理数据库表的创建和更新,支持SQL的CRUD操作,以及事务处理。GORM支持多种数据库,如MySQL、PostgreSQL、SQLite等,使得数据库...