`
klcwt
  • 浏览: 194589 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

Association in GORM

阅读更多
理解级联更新和删除
有三个需要理解:"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

    开源项目-jinzhu-gorm#association-mode.zip,Even easier to handle relationships, try out gorm's Association Mode

    gorm 中文文档(pdf)

    GORM是Go语言编写的开源对象关系映射(Object Relational Mapping,简称ORM)库,旨在为Golang开发者提供一个友好且功能齐全的ORM工具。ORM技术允许开发者通过面向对象的方式来操作关系数据库,无需编写大量的SQL...

    开源项目-jinzhu-gorm.zip

    这个开源项目,"jinzhu-gorm",旨在通过其独特的Association Mode,进一步简化数据库关联的操作,让开发者能够更加专注于业务逻辑,而不是繁琐的SQL编写。 GORM的核心理念是提供一种易于理解和使用的接口,使得Go...

    Grails GORM查询.pdf

    Grails框架中的GORM(Groovy Object Relational Mapping)是利用Groovy语言的优势来简化数据库操作的一套对象关系映射技术。GORM支持多种查询方式,提供了类似于Hibernate的查询能力,并且由于Groovy语言的动态特性...

    gorm文档_英文.pdf

    gorm文档_英文.pdf gorm文档是Golang语言中一个功能强大的ORM(Object-Relational Mapping)库,旨在提供简洁、灵活的数据库交互方式。下面是gorm文档的知识点总结: 1. Getting Started with GORM gorm文档的...

    GORM的独立启动(Standalone)

    在IT行业中,GORM是一个非常重要的工具,尤其在Grails框架中,它是处理数据库操作的主要接口。本篇文章将深入探讨GORM的独立启动(Standalone)功能,这使得开发者可以在不依赖整个Grails应用的情况下使用GORM的强大...

    基于GIN + GORM + WIRE实现的web脚手架,支持gorm数据库操作、cors 跨域、集成jwt鉴权等.zip

    2. **GORM**: GORM是一个强大的ORM库,用于简化Go语言与数据库之间的交互。它可以自动管理数据库表的创建和更新,支持SQL的CRUD操作,以及事务处理。GORM支持多种数据库,如MySQL、PostgreSQL、SQLite等,使得数据库...

Global site tag (gtag.js) - Google Analytics