Проблема Grails GORM:Объект ссылается на несохраненный временный экземпляр
Вопрос
Приведенный ниже код 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'
}
}
Не связан с StackOverflow