obtenu le code comme ceci:Dans Grails, pourquoi est-ce que je reçois une StaleObjectStateException directement après l'actualisation? Je
def myObject = MyDomainClass.get(myId)
myObject.refresh()
myObject.myProperty = myValue
myObject.save(flush:true, failOnError:true)
En dépit de l'obtenir et le rafraîchissement, je suis parfois un « org.hibernate.StaleObjectStateException: ligne a été mis à jour ou supprimé par une autre transaction (ou mappage unsaved-value était incorrecte) "lorsque la sauvegarde est exécutée.
Cela se produit lorsque je commence à exécuter cette méthode simultanément dans plusieurs sessions. Mais alors la transaction 1 est définitivement terminé, ce code est exécuté à nouveau pour la transaction 2 et échoue encore! (J'utilise un service de transaction pour ré-exécuter des transactions lorsqu'elles échouent en raison d'un verrouillage optimiste, voir here).
Comment cela peut-il être bien que j'obtienne une version "fraîche" de la DB?
Est-ce que 'MyDomainClass' h Avez-vous des relations en cascade, comme 'hasMany' ou' belongsTo'? Cela peut être les objets connectés qui sont mis à jour et enregistrés en cascade. À quelle classe fait référence StaleObjectStateException? –
MyDomainClass possède des relations hasMany et belongsTo, mais l'exception se réfère directement à MyDomainClass # id. –
@Joe, votre DomainClass a le champ de version? Et vous en avez besoin? – Gadonski