Grails Problema GORM: l'oggetto fa riferimento a un'istanza transitoria non salvata

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

  •  05-07-2019
  •  | 
  •  

Domanda

Il seguente codice Grails genera la seguente eccezione quando si tenta di .save () l'oggetto Foo:

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

Suppongo che mi sto perdendo alcune delle semantiche GORM in connessione con il popolamento automatico degli oggetti di dominio dai parametri HTTP.

La mia domanda è semplicemente:

  • Qual è il modo corretto di popolare e salvare l'oggetto Foo, senza ottenere detta eccezione?

Modello:

class Foo {
  Bar bar
}

Visualizza:

<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 ]
  }
}
È stato utile?

Soluzione

Se 'Bar' esiste solo nel contesto di Foo, aggiungi la seguente riga a Bar.groovy

class Bar {
   static belongsTo = Foo

}

Se 'Bar' viene utilizzato in un altro contesto, è possibile utilizzarlo in Foo.groovy

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


}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top