gpt4 book ai didi

hibernate - grails 3.3:org.hibernate.TransientObjectException与findOrSaveWhere

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

在bootstrap.goovy中,我们需要创建静态/测试数据库记录(如果尚不存在)(即在先前运行应用程序时创建的)

 def admin1 =  Operator.findOrSaveWhere(username: "admin", password: "test", firstName: "admin", lastName: "admin", email: "a@b.com")

如果记录不存在,则会创建记录;如果记录不存在,则会创建记录。大。

当我们想将admin1用作另一个sql语句中的字段时,问题就来了。
  def note1 =  Note.findOrSaveWhere(user: user1, operator: operator1, note: "This is a note. Pretty dull. User is Boib. you can trust him 1")

失败的原因是:
org.hibernate.TransientObjectException: object references an unsaved transient instance - save the transient instance before flushing: come.me.myapp.Operator

findOrSaveWhere大概是刚刚创建的运算符,但未刷新到DB。

通常,如果使用admin1.save(flush:true),它将解决此问题。有没有一种方法可以刷新使用findOrSaveWhere创建的内容?

最佳答案

您可以使用findOrCreateWhere:

def admin1 =  Operator.findOrCreateWhere( yadda:yadda, tadda:tadda )
if( !admin1.id ) admin.save flush:true
def note1 = Note.findOrSaveWhere(user: admin1)

另外一个选项:

您应该将代码放入显式事务 Operator.withTransaction{...}的 bootstrap 中,然后原始代码应该可以工作。

关于hibernate - grails 3.3:org.hibernate.TransientObjectException与findOrSaveWhere,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56297711/

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