grails - Grails GORM问题:对象引用了未保存的 transient 实例

标签 grails gorm

当尝试对Foo对象进行.save()时,下面的Grails代码将引发以下异常:

org.hibernate.TransientObjectException/
org.springframework.dao.InvalidDataAccessApiUsageException: 
object references an unsaved transient instance - 
save the transient instance before flushing: Bar

我想我缺少一些与从HTTP参数自动填充域对象有关的GORM语义。

我的问题很简单:
  • 在没有发生上述异常的情况下,填充和保存Foo对象的正确方法是什么?

  • 模型:
    class Foo {
      Bar bar
    }
    

    View :
    <g:form id="${foo.id}">
      <g:select name="foo.bar.id" from="${Bar.list()}" />
    </g:form>
    

    Controller :
    class FooController {
      def fooAction = {
        Foo foo = new Foo(params)
        foo.save()
        [ foo: foo ]
      }
    }
    

    最佳答案

    如果“Bar”仅存在于Foo的上下文中,则将以下行添加到Bar.groovy

    class Bar {
       static belongsTo = Foo
    
    }
    

    如果在其他上下文中使用“Bar”,则可以在Foo.groovy中使用
    class Foo {
      Bar bar
      static mapping = {
        bar cascade:'all-delete-orphan'
      }
    
    
    }
    

    关于grails - Grails GORM问题:对象引用了未保存的 transient 实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1803415/

    相关文章:

    grails - 在Grails Audit-Logging插件中获取对域ID的引用

    grails - 启用级联保存和事务的Grails域关联

    跨两个数据源的Grails GORM域关联

    mongodb - 无法下载Grails Datastore Gorm 3.1.3版本

    Grails:.save(flush:flush, insert:true) 与 .save(flush:true) 有何不同

    spring - 使用Grails和Spring Security向用户添加UserProfile。未设置参数#7

    grails - 用于Grails的内部邮件系统插件

    hibernate - Grails批量读取优化

    grails - 更新时未保存Grails bool 值字段

    java - Grails在同一域类中具有hasOne属性