diff --git a/hibernate-core/src/main/java/org/hibernate/internal/SessionImpl.java b/hibernate-core/src/main/java/org/hibernate/internal/SessionImpl.java index de65456798..ecdd0aff04 100644 --- a/hibernate-core/src/main/java/org/hibernate/internal/SessionImpl.java +++ b/hibernate-core/src/main/java/org/hibernate/internal/SessionImpl.java @@ -1340,8 +1340,8 @@ public void flush() throws HibernateException { } private void doFlush() { - checkTransactionNeededForUpdateOperation(); pulseTransactionCoordinator(); + checkTransactionNeededForUpdateOperation(); try { if ( persistenceContext.getCascadeLevel() > 0 ) { diff --git a/hibernate-core/src/test/java/org/hibernate/test/flush/TestFlushJoinTransaction.java b/hibernate-core/src/test/java/org/hibernate/test/flush/TestFlushJoinTransaction.java new file mode 100644 index 0000000000..c1aea28d56 --- /dev/null +++ b/hibernate-core/src/test/java/org/hibernate/test/flush/TestFlushJoinTransaction.java @@ -0,0 +1,68 @@ +/* + * Hibernate, Relational Persistence for Idiomatic Java + * + * License: GNU Lesser General Public License (LGPL), version 2.1 or later. + * See the lgpl.txt file in the root directory or . + */ +package org.hibernate.test.flush; + +import java.util.Map; + +import javax.persistence.TransactionRequiredException; + +import org.hibernate.Session; +import org.hibernate.cfg.AvailableSettings; +import org.junit.Assert; +import org.junit.Test; + +import org.hibernate.testing.TestForIssue; +import org.hibernate.testing.jta.TestingJtaBootstrap; +import org.hibernate.testing.jta.TestingJtaPlatformImpl; +import org.hibernate.testing.junit4.BaseNonConfigCoreFunctionalTestCase; + +/** + * @author Michiel Hendriks + */ +@TestForIssue(jiraKey = "HHH-13936") +public class TestFlushJoinTransaction extends BaseNonConfigCoreFunctionalTestCase { + + @Override + protected void addSettings(Map settings) { + super.addSettings( settings ); + TestingJtaBootstrap.prepare( settings ); + settings.put( AvailableSettings.TRANSACTION_COORDINATOR_STRATEGY, "jta" ); + } + + @Test + public void testFlush() throws Exception { + Session session = openSession(); + try { + TestingJtaPlatformImpl.INSTANCE.getTransactionManager().begin(); + session.flush(); + TestingJtaPlatformImpl.INSTANCE.getTransactionManager().commit(); + } + catch (TransactionRequiredException e) { + Assert.fail("No TransactionRequiredException expected."); + } + finally { + session.close(); + } + } + + @Test + public void testIsConnectedFlush() throws Exception { + Session session = openSession(); + try { + TestingJtaPlatformImpl.INSTANCE.getTransactionManager().begin(); + session.isConnected(); + session.flush(); + TestingJtaPlatformImpl.INSTANCE.getTransactionManager().commit(); + } + catch (TransactionRequiredException e) { + Assert.fail("No TransactionRequiredException expected."); + } + finally { + session.close(); + } + } +}