【问题标题】:Grails no id generated when saved and flushedGrails 保存和刷新时没有生成 id
【发布时间】:2017-05-04 04:49:53
【问题描述】:

Grails 没有为数据库对象生成 id。我创建了具有相应域类的对象。现在,如果我调用 save(flush:true) 我会得到 null id ...

但是flush不应该生成id吗?

【问题讨论】:

    标签: grails


    【解决方案1】:

    您确定它真的保存了它吗?这通常意味着存在错误,因此您需要捕获它并将其转发回去或其他什么。 您应该能够通过执行来查看错误

    if (!object. save(flush:true)) {
      // throw new RuntimeException("something went wrong");
       //println "object errors ${object.errors} //.allErrors}
       //or 
       //object.errors.reject('object.failed.saved', '')
    }
    

    有时甚至更嵌套失败,可以这样被捕获

    try {
                subobject.removeFromElements(object)
                subobject.save(flush:true)
            } catch (Exception e) {
                throw new ValidationException('failed.message',subobject.errors)
            }
    

    如果您首先尝试第一种方法以查看是否有错误,则 finally if still nothing 尝试通过将 try catch 包裹在整个保存块周围来进行测试,以查看其他组件是否导致您的问题。在这之间,你回答了

    【讨论】:

    • 在代码中窥探了几个小时后,我想我们已经找到了这个错误的原因。在 beforeEvent 中,我们询问 getDirtyPropertyNames() ,这在某种程度上导致了错误。
    【解决方案2】:

    您是否尝试在映射中添加以下内容?

    静态映射 = {

        id(generator: "assigned")
    
    }
    

    【讨论】:

    • 是的,这是存在的。一切正常。然后当我将一个大方法分成几部分时。什么都没有了。以前有效的每种类型的操作系统保存现在都不起作用。似乎是一些更大的错误。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-06-08
    • 1970-01-01
    • 1970-01-01
    • 2016-05-21
    • 2012-10-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多