Проблема Grails GORM:Объект ссылается на несохраненный временный экземпляр

StackOverflow https://stackoverflow.com/questions/1803415

  •  05-07-2019
  •  | 
  •  

Вопрос

Приведенный ниже код Grails выдает следующее исключение при попытке .save() объект Фу:

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

Полагаю, я упускаю некоторые возможности семантики GORM в связи с автоматическим заполнением объектов домена из параметров HTTP.

Мой вопрос просто:

  • Как правильно заполнить и сохранить объект Foo, не получив указанного исключения?

Модель:

class Foo {
  Bar bar
}

Вид:

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

Контроллер:

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'
  }


}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top