从另一个方法调用的@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); // doesn't work.

this.fooDao.save(bean); // works

}

}

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

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

回答:

这是Springs AOP的局限性之一。因为dao

bean实际上是在spring时创建的,所以它意味着它是代理,这意味着从同一个类中调用方法将不会调用通知(即事务)。其他切入点也是如此

以上是 从另一个方法调用的@Transactional方法未获得事务 的全部内容, 来源链接: utcz.com/qa/412626.html

回到顶部