I have the following scenario. I am using JPA, Spring:
@Autowired SampleService service; @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class) public void PerformLogic(LogicData data) throws SIASFaultMessage { SampleObject so = createSampleObject(); try{ .
When everything works fine, the data is stored in the database without any problems. However, when an exception is thrown, I need the updateSampleObject (so) method to save the information in the database. This is not what is happening. If an exception is thrown, the updateSampleObject method also rolls back, which I don't need. I need these two methods ( createSampleObject and updateSampleObject ) to be persistently saved, regardless of whether an exception is thrown or not. How can I achieve this?
Also, if I exchange the createSampleObject and updateSampleObject methods with
@Transactional(propagation = Propagation.NEVER)
The idea is that an exception is thrown, and I get no exception. What is the problem? Analyzing the logs, I see this line:
org.springframework.orm.jpa.JpaTransactionManager ==> Creating new transaction with name [com.test.PerformLogic]: PROPAGATION_REQUIRED,ISOLATION_DEFAULT....
which means that this transaction is created, but I do not see any hint of another transaction.
This is part of my configuration file for Spring regarding transactions.
<bean id="myDataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name="driverClassName" value="${jdbc.driverClassName}"/> <property name="url" value="${jdbc.url}"/> <property name="username" value="${jdbc.username}"/> <property name="password" value="${jdbc.password}"/> </bean> <bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"> <property name="dataSource" ref="myDataSource"/> <property name="packagesToScan" value="cu.jpa"/> <property name="persistenceProviderClass" value="org.hibernate.ejb.HibernatePersistence"/> <property name="jpaProperties"> <props> <prop key="hibernate.dialect">${hibernate.dialect}</prop> <prop key="hibernate.show_sql">true</prop> <prop key="hibernate.hbm2ddl.auto">${hdm2ddl.auto}</prop> </props> </property> <property value="/META-INF/jpa-persistence.xml" name="persistenceXmlLocation"/> <property name="persistenceUnitName" value="jpaPersistenceUnit"/> </bean> <bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager"> <property name="entityManagerFactory" ref="entityManagerFactory"/> <property name="nestedTransactionAllowed" value="true" /> </bean> <tx:annotation-driven transaction-manager="transactionManager"/>
java spring hibernate jpa transactions
Alfredo A.
source share