Escribo una aplicación pequeña de Grails, y sigo recibiendo StaleObjectStateException: s para aproximadamente 1/10: th de las llamadas a "createfoo" cuando ejecuto el siguiente código bastante simple. Probablemente me esté perdiendo la mejor manera de usar GORM.GORM en Grails y StaleObjectStateException
Este es el código:
def viewfoo = {
session.user.refresh()
// ...
}
def createfoo = {
session.user.refresh()
var user = session.user
if (param["name"]) {
var newFoo = new Foo()
newFoo.name = param["name"]
if (newFoo.validate()) {
newFoo.save()
if (user.validate()) {
user.addToFoos(newFoo)
} else {
user.discard()
}
} else {
newFoo.discard()
}
}
}
Mis preguntas con respecto GORM mejores prácticas:
es el "validar si-() - entonces-save() - otro descarte() "la forma correcta de persistir un nuevo objeto en GORM?
¿Debo validar todos los objetos que voy a guardar()? Es decir. ¿Debería validar tanto el Foo-object como el User-object en el código anterior? ¿Validará el objeto de usuario implícitamente comprobar el estado del Foo-objeto?
¿Qué hice para merecer StaleObjectStateException? :-)
La excepción GORM/Hibernate:
Caused by: Object of class [Foo] with identifier [15]: optimistic locking failed; nested exception is org.hibernate.StaleObjectStateException: Row was updated or deleted by another transaction (or unsaved-value mapping was incorrect): [Foo#15]