2013-12-20 61 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子句,它被用来代替。

请记住,对于事务包装,不能拦截私有方法。这是因为你不能在子类中重载私有方法。如果遇到任何这样的方法,他们将被默默地忽略。