GRAILS GORM -Problem: Objekt verweist auf eine nicht gerettete transiente Instanz

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

  •  05-07-2019
  •  | 
  •  

Frage

Der nachstehende Gralscode läuft die folgende Ausnahme aus, wenn Sie versuchen .save() Das Foo -Objekt:

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

Ich glaube, ich verpasse einige der GORM -Semantik im Zusammenhang mit automatisch besiedelten Domänenobjekten aus HTTP -Params.

Meine Frage ist einfach:

  • Was ist der richtige Weg, um das FOO -Objekt zu bevölkern und zu retten, ohne die Ausnahme zu erhalten?

Modell:

class Foo {
  Bar bar
}

Aussicht:

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

Regler:

class FooController {
  def fooAction = {
    Foo foo = new Foo(params)
    foo.save()
    [ foo: foo ]
  }
}
War es hilfreich?

Lösung

Wenn 'Bar' nur im Kontext von Foo existiert, fügen Sie die folgende Zeile zu Bar.Groovy hinzu

class Bar {
   static belongsTo = Foo

}

Wenn in einem anderen Kontext 'Bar' verwendet wird, können Sie in Foo.groovy verwenden

class Foo {
  Bar bar
  static mapping = {
    bar cascade:'all-delete-orphan'
  }


}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top