2009-11-17 6 views
1

Supposons que le code suivant dans un contrôleur Grails:la désactivation du verrouillage pour Grails non critiques/classes de domaine GORM

def action = { 
    ClassName o = ClassName.findByFoo(params.foo) 
    if (o) { 
    o.counter += 1 
    } 
} 

par Grails par défaut utilise le verrouillage optimiste par la colonne version ajoutée par défaut à toutes les tables de base de données GORM. Toutefois, si un nombre suffisant de multiples demandes simultanées sont envoyées à cette action le mécanisme de verrouillage optimiste va se détériorer à l'exception suivante:

org.hibernate.StaleObjectStateException: 
    Row was updated or deleted by another transaction (or unsaved-value mapping was 
    incorrect): [ClassName#id] 

Pour les objets de domaine où une mise à jour a échoué/suppression est totalement non critique I J'aimerais désactiver le mécanisme de verrouillage, afin qu'aucune exception StaleObjectStateException ne soit levée. Comment puis-je y parvenir?

Répondre

5

De mapping DSL docs: vous pouvez le désactiver thusly:

class Person { 
    .. 
    static mapping = { 
     table 'people' 
     version false 
    } 
} 

Je doute que vous pouvez le désactiver pour un appel spécifique.