Hm, i got it to work.
- To test Transactions: a simple
em.flush()
is all i need (thanks to @TaoufikMohdit for the idea). If there is no transaction,flush()
throws aTransactionRequiredException
! @Transactional
is for Spring-Managed-Beans only. So i create a Service:@Service public class BasicTransactionalService { @PersistenceContext HibernateEntityManager em; @Transactional public void testFlushInTransactional() { em.flush(); } @Deprecated public void testFlushOutsideTransactional() { em.flush(); } @Transactional public void testFlushSubroutineTransactional() { testFlushOutsideTransactional(); } }
I changed the Tests to:
@Autowired BasicTransactionalService bean; @Test public void testTransactionIsolation() { bean.testFlushInTransactional(); } @Test(expected = TransactionRequiredException.class) @SuppressWarnings("deprecation") public void testThrowsTransactionRequiredException() { bean.testFlushOutsideTransactional(); } @Test public void testTransactionalSubroutine(){ bean.testFlushSubroutineTransactional(); }
Now it works fine.
BTW This is my app-config.xml
<beans>
<bean class="BasicTransactionalService" />
<bean class="org.springframework.orm.jpa.LocalEntityManagerFactoryBean" />
<bean class="org.springframework.orm.jpa.JpaTransactionManager" />
<tx:annotation-driven />
<beans>