在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和Hibernate 3.我在這裏做錯了什麼?謝謝。
用@Transactional註釋saveWrap方法沒有什麼壞處。事務傳播的默認行爲是REQUIRED,這意味着如果您要獲得嵌套事務(即,您處於事務中,然後調用另一個也是@Transactional的方法),則只需使用現有事務,而不是創建另一個如果這就是你害怕的) – 2011-02-24 19:38:12
如何使用cglib來代理?我記得cglib代理的建議,即使你在同一個類中調用它。 – hiway 2018-01-29 04:08:28