Метод @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 () не сохраняет никаких изменений.

Я использую Spring 3 и Hibernate 3. Что я здесь делаю не так? Спасибо.

22
задан Tom Tucker 24 February 2011 в 19:22
поделиться