2013-12-20 59 views
1

我有方法M.與服務A. @Transactional覆蓋事務方法

service B extends A與overrided方法M.

將被overrided方法M.還是交易? 或者我應該加上那裏@Transactional

回答

4

你究竟在問什麼:對方法繼承的@Transactional註解。

簡答:沒有。方法的註釋從來沒有被繼承。

長答案:請參閱this post

2

大多數情況下,您可以在課堂上使用一個@Transactional。但是有時你需要定製一種方法來改變行爲。在這些情況下,使用相同的@Transactional註釋標記所有其他方法仍然是多餘的。

經編持續提供了一種工具,其中如果需要的話可以重寫類的具有特定@Transactional事務行爲的具體方法:

@Transactional 
public class MyRepository { 
public void save(Thing t) { .. } 

@Transactional(rollbackOn = NoSuchEntityException.class) //optional 
public void remove(Thing t) { .. } 

public Thing fetch(Long id) { .. } 
} 

在上面的例子中,保存()和取()具有標準事務行爲在類級別上指定。但是remove()有一個特定的rollbackOn子句,它被用來代替。

請記住,對於事務包裝,不能攔截私有方法。這是因爲你不能在子類中重載私有方法。如果遇到任何這樣的方法,他們將被默默地忽略。