Grails2中One-to-many关系

当一个类(Author),拥有另外一个类(Book),就是一个one-to-many关系。在 Grails中,你可以用hasMany 来定义这种关系:

class Author {

    static hasMany = [books: Book]

    String name

}

class Book {

    String title

}

在这种情况下我们拥有一个单向的 one-to-many Grails默认情况下, 这种映射关系是连接一张表。

ORM DSL允许使用外键关联,而不是单向关系映射。

Grails 将依赖于hasMany设置,自动将一个java.util.Set属性类型注入到domain class中,这可以用来遍历集合:

def a = Author.get(1)

for (book in a.books) {

    println book.title

}

 

Grails默认的获取策略是使用“lazy”加载,这意味着第一次访问该集合将被延迟初始化。如果你不小心,这可能会导致 n+1 problem 问题。

如果你需要采取"eager"获取策略,你可以使用 ORM DSL 或者指定急切抓取就像一个 query的一部分。

默认的级联行为是级联保存和级联更新,但不包括级联删除,除非指定了 belongsTo

class Author {

    static hasMany = [books: Book]

    String name

}

class Book {

    static belongsTo = [author: Author]

    String title

}

如果你有两个相同类型的属性在one-to-many many一方,你必须使用mappedBy 来指定到不同的集合映射:

class Airport {

    static hasMany = [flights: Flight]

    static mappedBy = [flights:"departureAirport"]

}

class Flight {

    Airport departureAirport

    Airport destinationAirport

}

如果你有多个集合映射到many方不同的属性,这样做是正确的:

class Airport {

    static hasMany = [outboundFlights: Flight,inboundFlights: Flight]

    static mappedBy = [outboundFlights:"departureAirport",

                      inboundFlights:"destinationAirport"]

}

class Flight {

    Airport departureAirport

    Airport destinationAirport

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值