Somehow, my test does not roll back the delete transaction when running the Spring test. Data is permanently deleted. I am using Spring -Hibernate combo.
here is my test class:
@RunWith(SpringJUnit4ClassRunner.class)
@TestExecutionListeners( {TransactionalTestExecutionListener.class,
DependencyInjectionTestExecutionListener.class
})
@ContextConfiguration(locations={"/testApplicationContext.xml"})
@TransactionConfiguration(defaultRollback=true)
public class TestDummy {
private ApplicationContext context;
@Transactional
private AccountManager getAccountManager() {
this.context = new ClassPathXmlApplicationContext("testApplicationContext.xml");
return (AccountManager) context.getBean("accountManager");
}
@Test
@Transactional
@Rollback(true)
public void testDeleteAccount(){
Account acc = getAccountManager().getAccountDaoHibernate().get("87EDA29EBB65371CE04500144F54AB6D");
System.out.println("Account name is "+acc.getAccountName());
getAccountManager().deleteAccountHard(acc);
Account acc1 = getAccountManager().getAccountDaoHibernate().get("87EDA29EBB65371CE04500144F54AB6D");
if(acc1 != null){
System.out.println("Now name is "+ acc1.getAccountName());
}else{
System.out.println("Account again is null");
}
}
}
I see a message on the console "Account is zero again", which should be. As in the test. But after the test is completed. In the database, the record with the identifier "87EDA29EBB65371CE04500144F54AB6D" is permanently deleted !. It should roll back after the test is completed. I am really confused why transactions are not rolled back.
Here are my testApplicationContext.xml entries:
<bean id="accountManager" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
<property name="target"><ref local="accountManagerTarget"/></property>
<property name="transactionManager"><ref local="transactionManager"/></property>
<property name="transactionAttributes">
<props>
<prop key="get*">PROPAGATION_SUPPORTS,readOnly</prop>
<prop key="find*">PROPAGATION_REQUIRED,readOnly</prop>
<prop key="load*">PROPAGATION_REQUIRED,readOnly</prop>
<prop key="add*">PROPAGATION_REQUIRED</prop>
<prop key="del*">PROPAGATION_REQUIRED</prop>
</props>
</property>
<property name="preInterceptors">
<list>
<ref bean="hibernateInterceptor"/>
</list>
</property>
</bean>
<bean id="accountManagerTarget"
class="com.db.spgit.abstrack.manager.AccountManager">
<property name="accountDaoHibernate" ref="accountDaoHibernate" />
</bean>
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="configurationClass">
<value>org.hibernate.cfg.AnnotationConfiguration</value>
</property>
<property name="configLocation">
<value>classpath:hibernate-test.cfg.xml</value>
</property>
</bean>
<bean id="hibernateInterceptor" class="org.springframework.orm.hibernate3.HibernateInterceptor">
<property name="sessionFactory">
<ref bean="sessionFactory"/>
</property>
</bean>
<bean id="hibernateTemplate"
class="org.springframework.orm.hibernate3.HibernateTemplate">
<property name="sessionFactory" ref="sessionFactory" />
</bean>
source
share