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