Writes are committed immediately during a JPA/JTA transaction in EAP
Issue
- A persistence unit is configured as below
<persistence-unit name="MyTestUnit" transaction-type="JTA">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
...
<properties>
<property name="hibernate.connection.driver_class" value="..." />
<property name="hibernate.connection.url" value="..." />
<property name="hibernate.connection.username" value="..." />
<property name="hibernate.connection.password" value="..." />
<property name="hibernate.dialect" value="org.hibernate.dialect.HSQLDialect" />
...
</properties>
</persistence-unit>
- A transaction executes as below
txMgr.begin();
// Hook the entity manager into transaction events (e.g. commit) - not required in most environments
entityManager.joinTransaction();
// Write is not immediate on the persist() call, it is deferred until the first flush
entityManager.persist(new Event("meeting"));
// A committed write occurs in the process of executing the query below
entityManager.createQuery("from Event").getResultList().size();
// This rollback has no effect
txMgr.rollback();
// The assertion fails due to the write above
Assert.assertEquals(0, entityManager.createQuery("from Event").getResultList().size());
Environment
- Red Hat JBoss Enterprise Application Platform (EAP)
- 4
- 5
- 6
- Hibernate
- 3
- 4
Subscriber exclusive content
A Red Hat subscription provides unlimited access to our knowledgebase of over 48,000 articles and solutions.
Welcome! Check out the Getting Started with Red Hat page for quick tours and guides for common tasks.
