小编典典

从另一个方法调用的@Transactional方法未获得事务

spring

在Spring中,带有注释的方法 @Transactional将获得一个新的事务(如果还没有),但是我注意到,如果从非事务处理方法调用事务方法,则不会获得任何事务。这是代码。

@Component
public class FooDao {
    private EntityManager entityManager;

    @PersistenceContext
    protected void setEntityManager(EntityManager entityManager) {
        this.entityManager = entityManager;
    }

    @Transactional
    public Object save(Object bean) {
        return this.entityManager.merge(bean);
    }

    public Object saveWrap(Object bean) {
        return save(bean);
    }
}

@Component
public class FooService {
    private FooDao fooDao;

    public void save(Object bean) {
        this.fooDao.saveWrap(bean); // doesn't work.
        this.fooDao.save(bean); // works
    }
}

saveWrap()是一个常规方法,save()该方法是事务性的,但saveWrap()不会保留任何更改。

我正在使用Spring 3和Hibernate3。在这里我做错了什么?谢谢。


阅读 1677

收藏
2020-04-13

共1个答案

小编典典

这是Springs AOP的局限性之一。由于dao bean实际上是在spring之前创建的,因此它是代理,这意味着从同一类中调用方法将不会调用通知(即事务)。其他切入点也是如此

2020-04-13