gpt4 book ai didi

grails - Grails:尝试使用嵌套对象保存对象。没有错误但没有ID

转载 作者:行者123 更新时间:2023-12-02 14:42:11 27 4
gpt4 key购买 nike

这是我的应用程序:我的用户由三个元素组成

  • 用户(用户名,密码,角色等。来自SpringSecurity)
  • AppUser (基本详细信息,例如姓氏等)
  • 详细信息用户(具体细节取决于应用程序,工作区等)

  • AppUser包含User和DetailUser的实例(此lastone可为空)

    这是我的代码:
     if (user.validate() &&  appUser.validate() ){
    user.save()
    appUser.user = user
    appUser.save()

    appUserDetail.appUser = appUser
    appUserDetail.save()

    }

    没有错误验证,但我的appUser的ID为null!

    真心的我不明白为什么。

    更新
    Hibernate.AssertionFailure an assertion failure occured (this may indicate a bug in Hibernate, but is more likely due to unsafe use of the session)
    org.hibernate.AssertionFailure: null id in it.geny.auth.AppUser entry (don't flush the Session after an exception occurs)

    最佳答案

    首先,没有.save()failOnError: true不会有任何错误

    user.save(failOnError: true)

    它只会悄悄地不保存,也不会真正通知它失败(如果您想查看失败,则必须检查它是否包含错误)。

    最后,在与要在其中创建联接表的保存有关的大量事件中都会出现该特定错误。

    我所见过的最好的是,您要确保 parent 和 child 都具有彼此的链接。因此,您想要执行以下操作:
     if (user.validate() &&  appUser.validate() ){
    user.appUser = appUser
    appUser.user = user
    appUserDetail.appUser = appUser
    appUser.UserDetail = appUserDetail

    appUserDetail.save(failOnError: true)
    appUser.save(failOnError: true)
    user.save(failOnError: true)

    }

    我没有测试此代码,您可能需要对它稍加烦恼,但关键是要在保存之前确保每个对象都指向另一个对象。

    failOnError可能不是必需的,并且您可能不希望在保存失败的情况下引发异常,在这种情况下,您可以只调用 .save(),然后检查 user.errors中是否存在给定的错误。通常,我在gsp中使用 g:eachError标记向最终用户显示错误,以便他们清理提交内容并重试。

    关于grails - Grails:尝试使用嵌套对象保存对象。没有错误但没有ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29218310/

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