在Spring中,带有注释的方法 @Transactional将获得一个新的事务(如果还没有),但是我注意到,如果从非事务处理方法调用事务方法,则不会获得任何事务。这是代码。
@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()不会保留任何更改。
saveWrap()
save()
我正在使用Spring 3和Hibernate3。在这里我做错了什么?谢谢。
这是Springs AOP的局限性之一。因为dao bean实际上是在spring时创建的,所以它意味着它是代理,这意味着从同一个类中调用方法将不会调用通知(即事务)。其他切入点也是如此