0

Config.xmlSpring сделка не откатить исключением

<bean id="emfactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"> 
    <property name="dataSource" ref="dataSource"/> 
    <property name="persistenceUnitName" ref="default"/> 
    <property name="jpaVendorAdaptor"> 
     <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdaptor"/> 
    </property> 
    <property name="jpaProperties"> 
     <prop key="hibernate.show_sql">true</prop> 
     <prop key="hibernate.dialect">com.xxx.xxx.xxx.xxx.SQLServer2012CustomDialect</prop> 
    </property> 
</bean> 

<tx:annotation-driven transaction-manager="txManager"/> 
<bean id="txManager" class="org.springframework.orm.jpa.JpaTransactionManager"> 
    <property name="entityManagerFactory" ref="emfactory"/> 
</bean> 

Service.java

@Transactional 
public void save(Dto dto) throws Exception{ 
    dao.save(entity); 
    throw new Exception(); 
} 

Моя проблема в том, что это исключение не откатить транзакцию. Я много искал и обнаружил, что транзакция с возвратом пружины по умолчанию для исключений во время выполнения/непроверенных по умолчанию. Я попробовал следующее:

@Transactional 
public void save(Dto dto) throws Exception{ 
    dao.save(entity); 
    throw new RunTimeException(); 
} 

Это прекрасно работает, но это не всегда код, который везде исключает исключение во время выполнения. Итак, я выкапываю и обнаружил rollbackFor как следующее;

@Transactional(rollbackFor = Exception.class) 
public void save(Dto dto) throws Exception{ 
    dao.save(entity); 
    throw new Exception(); 
} 

Теперь я должен изменить все свои коды, чтобы изменить @Transactional с rollbackFor. Но любой другой способ изменить все свойства @Transaction advice для rollbackFor = Exception.class?

+0

dao.save (entity); Является ли ваш класс дао обозначенным как транзакционный? –

+0

Да. В некоторых местах. – Esty

+0

@NiravShah, уточните пожалуйста. с транзакцией в DAO.save его workinh отлично сейчас, если я сделаю свой сервис, сохраните транзакцию для rollbackFor Exception.class. – Esty

ответ

1

Посмотрите также на красный прямоугольник на изображении:

enter image description here

С @Transactional по умолчанию является отката только непроверенные исключения, проверяется исключение не будет откатитьпо умолчанию.

Это может решить вашу проблему: (Посмотрите на красный прямоугольник)

enter image description here

Вы допускаете, чтобы передать массив классов этого атрибута, то вы должны написать это:

@Transactional(rollbackFor = new Class[]{Exception.class})

и не, как вы написали:

@Transactional(rollbackFor = Exception.class)

Теперь, если вы хотите откатить проверяемые исключения без указания rollbackFor собственности, вам придется добавить конфигурацию XML, в файл конфигурации. Пример:

<tx:advice id="txAdvice"> 
    <tx:attributes> 
     <tx:method name="*" rollback-for="Throwable"/> 
    </tx:attributes> 
</tx:advice> 

Добавьте это в свой файл конфигурации XML. Вышеупомянутые исключения будут проверены на возврат.

+0

Я знаю это, и я сделал это, прежде чем задавать этот вопрос. Проверьте мой обновленный вопрос. Есть ли способ изменить все свойства @transaction с помощью rollbackFor класса Exception при одном выстреле? – Esty

+0

Вы хотите использовать аннотацию @Transactional без указания атрибута rollbackfor и, тем не менее, откат для отмеченных исключений? –

+0

Точно. Будет ли это сделано из какой-то конфигурации? – Esty

Смежные вопросы