2011-12-22 27 views

回答

7

來自Spring API here

評估方法的事務設置時,派生最多的位置優先。在以下示例中,DefaultFooService類在類級別使用只讀事務的設置進行註釋,但同一類中updateFoo(Foo)方法的@Transactional註釋優先於定義的事務設置在班級一級。

@Transactional(readOnly = true) 
public class DefaultFooService implements FooService { 

    public Foo getFoo(String fooName) { 
    // do something 
    } 

    // these settings have precedence for this method 
    @Transactional(readOnly = false, propagation = Propagation.REQUIRES_NEW) 
    public void updateFoo(Foo foo) { 
    // do something 
    } 
} 

@Transactional註解的是,指定的接口,類或方法必須具有事務語義的元數據;例如,「在調用此方法時啓動全新的只讀事務,暫停任何現有事務」。默認@Transactional設置如下:

傳播設置爲PROPAGATION_REQUIRED。

隔離級別是ISOLATION_DEFAULT。

交易是可讀寫的。

事務超時默認爲基礎事務系統的默認超時,如果超時不受支持,則默認爲none。

任何RuntimeException觸發回滾,並且任何檢查的異常不會。

+0

當僅使用@Transactional而沒有readonly屬性時,這是否意味着readonly = false默認情況下是什麼? – 2011-12-22 14:14:27

+1

'readonly' [默認爲false](http://static.springsource.org/spring/docs/2.5.x/api/org/springframework/transaction/annotation/Transactional.html#readOnly%28%29) – 2011-12-22 14:23:02

+0

I已經用完整的默認值列表更新了答案。 – ManuPK 2011-12-22 14:25:53