2009-11-17 15 views
1

假設在一個Grails控制器以下代碼:禁用鎖定用於非關鍵的Grails/GORM域類

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

默認的Grails經由默認添加到所有GORM數據庫表version列使用樂觀鎖。但是,如果數量足夠多的多個併發請求被髮送到這一行動的樂觀鎖機制將打破但下列情況除外:

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

對於那些失敗的更新/刪除域對象是完全非關鍵的我我想禁用鎖定機制,這樣就不會引發任何StaleObjectStateException異常。我如何實現這一目標?

回答

5

mapping DSL docs:您可以禁用正是如此它:

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

我懷疑你可以禁用它針對特定的呼叫。