Я искал этот вопрос, их довольно много здесь, в StackOverflow и Google, но я не могу заставить что-то работать на меня.
вот мои коды
Spring config: (я не использую pointcut - думаю, мне это не нужно?)
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
...
</bean>
<bean id="hibernateSessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
...
</bean>
<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="hibernateSessionFactory"/>
</bean>
<tx:annotation-driven transaction-manager="transactionManager"/>
У меня есть Класс обслуживания:
@Service
public class ServiceImpl implements ServiceInterface
{
/**
* Injected session factory
*/
@Autowired(required=true)
private SessionFactory sessionFactory;
@Autowired(required=true)
private Dao myDao;
/**
* {@inheritDoc}
*/
@Transactional(rollbackFor=Exception.class, propagation=Propagation.REQUIRED)
public void scheduleBlast(BlastParameters blastParameters) throws ServiceException
{
... do bunch of stuff ..
myDao.persist(entity)
if(true)
throw new ServiceException("random error")
}
.. setter methods and other stuff ..
}
и класс Дао:
public class DaoImpl implements DaoInterface
{
@Autowired(required=true)
private SessionFactory sessionFactory
/**
* {@inheritDoc}
*/
@Transactional(propagation=Propagation.MANDATORY)
public void persist(Entity e) throws DaoException
{
try
{
sessionFactory.getCurrentSession().persist(e);
}
catch(Exception ex)
{
throw new DaoException(ex);
}
}
.. setter methods and other stuff ..
}
Некоторые ненужные детали удалены (например, отсутствует установщик и т. Д.), При условии, что код работает отлично.
Моя проблема с вышесказанным заключается в том, что когда я добавляю строку исключения случайного выброса, она не откатывается, объект, сохраняемый в DAO, остается в БД.
Я использую Spring 3.1 и Hibernate 3.6 (потому что в Spring 3.1 была ошибка с Hibernate 4.0)
Мысли
Спасибо