@Transactional方法被另一个方法调用时,无法获取事务。

12 浏览
0 Comments

@Transactional方法被另一个方法调用时,无法获取事务。

在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); // 不起作用
        this.fooDao.save(bean); // 起作用
    }
}

saveWrap()是一个普通方法,调用了一个带有事务性的save()方法,但saveWrap()不会持久化任何更改。

我使用的是Spring 3和Hibernate 3。我在这里做错了什么?谢谢。

0