@Transactional
으로 주석 처리 된 메소드는 이미 트랜잭션이없는 경우 새 트랜잭션을 가져 오지만 트랜잭션 메소드는 트랜잭션을 가져 오지 못한다 트랜잭션이 비 트랜잭션 (non-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을 사용하고 있습니다. 여기서 내가 뭘 잘못하고 있니? 감사.
saveWrap 메소드에 @Transactional 주석을 달아도 아무런 해가 없습니다. 트랜잭션 전파의 기본 동작은 REQUIRED입니다. 즉, 중첩 트랜잭션 (즉, 트랜잭션에 있으며 @Transactional 인 다른 메소드를 호출하는 경우)은 기존 트랜잭션을 사용하고 생성하지 않고 다른 하나는 당신이 무서워하는 경우) –
프록시 cglib를 사용하는 방법에 대해? 나는 모든 클래스에서 cglib 프록시 조언을 기억한다. 심지어 같은 클래스 내에서 호출한다. – hiway