gpt4 book ai didi

Grails addTo* 说明

转载 作者:行者123 更新时间:2023-12-04 11:13:34 30 4
gpt4 key购买 nike

我正在遵循 Grails in Action 中的示例。我有一个问题,如何理解 addTo*()功能有效。

我有一个简单的域:具有以下关系的用户、帖子、标签:

  • 用户1对M发帖
  • 用户一对一标签
  • 发布 M-to-M 标签

  • 当我运行以下代码时(第一种情况):
    1.  def user = new User(userId: 'joe', password: 'secret').save()
    2. def tagGroovy = new Tag(name: 'groovy')
    3. def tagGrails = new Tag(name: 'grails')
    4. user.addToTags(tagGroovy)
    5. user.addToTags(tagGrails)
    6.
    7. def groovyPost = new Post(content: 'A groovy post')
    8. user.addToPosts(groovyPost)
    9. groovyPost.addToTags(tagGroovy)
    10.
    11. User.get(1).tags.each {println it.id + " " + it.name}
    12. User.get(1).posts.each {println it.id + " " + it.content + " " + it.dateCreated}

    我明白了:
    null grails
    null groovy
    null A groovy post null

    如果我将第 4、5 和 8 行更改为:
    4.  user.addToTags(tagGroovy).save(flush: true)              
    5. user.addToTags(tagGrails).save(flush: true)
    8. user.addToPosts(groovyPost).save(flush: true)

    我明白了:
    2 grails
    1 groovy
    1 A groovy post Tue Nov 22 21:00:00 WET 2011

    有人可以解释为什么在第一种情况下 iddateCreated属性不持久化?

    最佳答案

    这确实是一个休眠问题。

    只有当您保存用户对象时,才会保存整个对象图。因此它们与用户相关联,但尚未保存在数据库中,因此它们没有 id。

    在您的示例中,如果您在 get(1) 行之前添加 User.save(flush: true ),您将看到所有新帖子都保留在数据库中。

    Peter Ledbrook 在这篇文章中对其进行了更好的解释 - http://blog.springsource.org/2010/06/23/gorm-gotchas-part-1/

    关于Grails addTo* 说明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8234027/

    30 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com