У меня есть способ добавить элемент в таблицу и проверить исключение Мой элемент хранится в таблице. Исключение возникает, но сделка не была Откат Мой методSpring Transactional rollbackFor не работает
@Transactional(propagation = Propagation.REQUIRED, readOnly = false,
rollbackFor={java.lang.Exception.class, java.lang.RuntimeException.class})
public MyBean addItem(MyBean bean, Integer iduser) throws Exception {
NalogBean nb = txTemplate.execute(new TransactionCallback<MyBean>() {
@Override
public MyBean doInTransaction(TransactionStatus txStatus) {
MyBean nbl = null;
try {
sessionFactory.getCurrentSession().saveOrUpdate(bean);
throw new RuntimeException("Exception throwed!");
} catch (Exception e) {
txStatus.setRollbackOnly();
}
return nbl;
}
});
return nb;
}
Мой сервлет-контекст является стандартным
<tx:annotation-driven transaction-manager="transactionManager"/>
<beans:bean id="dataSource"
class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<beans:property name="driverClassName" value="${database.driver}" />
<beans:property name="url" value="${database.url}" />
<beans:property name="username" value="${database.user}" />
<beans:property name="password" value="${database.password}" />
</beans:bean>
<beans:bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
<beans:property name="dataSource" ref="dataSource"></beans:property>
<beans:property name="hibernateProperties">
<beans:props>
<beans:prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</beans:prop>
</beans:props>
</beans:property>
<beans:property name="packagesToScan" value="rs.co"></beans:property>
<beans:property name="annotatedClasses">
<beans:list>
<beans:value>rs.co.mfp.klijent.finansije.model.NalogModel</beans:value>
</beans:list>
</beans:property>
</beans:bean>
<beans:bean id="transactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager">
<beans:property name="sessionFactory" ref="sessionFactory"/>
</beans:bean>
и когда я называю AddItem это магазин боб в таблицу. Также я стараюсь без txTemplate, только sessionFactory.getCurrentSession(). SaveOrUpdate (bean); throw new RuntimeException («Исключение выбрано!»); но такой же результат. Элемент хранился в таблице. Любая идея?
Вы можете удалить RuntimeException в блоке rollbackFor, потому что он наследует Exception. Кроме того, вы повторяете значение по умолчанию для readOnly и распространения. –
mh-dev, Да, это много, но я все стараюсь. Также я попробовать @Transactional (распространение = Propagation.REQUIRED, READONLY = FALSE, \t \t \t rollbackFor = {java.lang.Exception.class, java.lang.RuntimeException.class}) \t общественного NalogBean addNalog (NalogBean фасоль, Integer iduser) throws Exception { \t \t \t \t NalogModel model = null; \t \t \t model = convertToModel (bean); \t \t \t sessionFactory.getCurrentSession(). SaveOrUpdate (model); \t \t bean.setIdnalog (model.getIdnalog()); \t \t if (true) \t \t throw new RuntimeException («Исключение выбрано!»); \t \t // testRequired(); \t \t bean bean; \t }, но он написал данные в таблицу – Milos
Если честно, то, что вы делаете, - далеко от того, как я использую весну в наши дни. Вся эта xml-конфигурация автоматически загружает Spring Boot. (рядом с конфигурацией datasource в файле свойств). Один важный вопрос: вы вызываете этот метод из одного класса? Если да, то аннотация не имеет никакого эффекта без aop. –