From 26edb2863fd46ec7a3cde6e1b79c18f3bee5c398 Mon Sep 17 00:00:00 2001 From: mimmoz81 Date: Fri, 11 Oct 2019 10:12:34 +0200 Subject: [PATCH] HHH-13663 Method setHibernateFlushMode not callable without an active transaction on threadbound Sessions --- .../internal/ThreadLocalSessionContext.java | 1 + ...hModeOnThreadLocalInactiveTransaction.java | 37 +++++++++++++++++++ 2 files changed, 38 insertions(+) create mode 100644 hibernate-core/src/test/java/org/hibernate/test/flush/TestHibernateFlushModeOnThreadLocalInactiveTransaction.java diff --git a/hibernate-core/src/main/java/org/hibernate/context/internal/ThreadLocalSessionContext.java b/hibernate-core/src/main/java/org/hibernate/context/internal/ThreadLocalSessionContext.java index b87cab0e14..c49cfc0e2e 100644 --- a/hibernate-core/src/main/java/org/hibernate/context/internal/ThreadLocalSessionContext.java +++ b/hibernate-core/src/main/java/org/hibernate/context/internal/ThreadLocalSessionContext.java @@ -332,6 +332,7 @@ public class ThreadLocalSessionContext extends AbstractCurrentSessionContext { || "getTransaction".equals( methodName ) || "isTransactionInProgress".equals( methodName ) || "setFlushMode".equals( methodName ) + || "setHibernateFlushMode".equals( methodName ) || "getFactory".equals( methodName ) || "getSessionFactory".equals( methodName ) || "getTenantIdentifier".equals( methodName ) ) { diff --git a/hibernate-core/src/test/java/org/hibernate/test/flush/TestHibernateFlushModeOnThreadLocalInactiveTransaction.java b/hibernate-core/src/test/java/org/hibernate/test/flush/TestHibernateFlushModeOnThreadLocalInactiveTransaction.java new file mode 100644 index 0000000000..ef442e7ea7 --- /dev/null +++ b/hibernate-core/src/test/java/org/hibernate/test/flush/TestHibernateFlushModeOnThreadLocalInactiveTransaction.java @@ -0,0 +1,37 @@ +/* + * 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 org.hibernate.FlushMode; +import org.hibernate.Session; +import org.hibernate.cfg.AvailableSettings; +import org.hibernate.cfg.Configuration; +import org.hibernate.testing.TestForIssue; +import org.hibernate.testing.junit4.BaseCoreFunctionalTestCase; +import org.junit.Test; + +/** + * Test for issue https://hibernate.atlassian.net/browse/HHH-13663 + * + * @author Luca Domenichini + */ +@TestForIssue(jiraKey = "HHH-13663") +public class TestHibernateFlushModeOnThreadLocalInactiveTransaction extends BaseCoreFunctionalTestCase { + + @Override + protected void configure(Configuration configuration) { + configuration.setProperty(AvailableSettings.CURRENT_SESSION_CONTEXT_CLASS, "thread"); + } + + @Test + public void testHibernateFlushModeOnInactiveTransaction() { + Session s = openSession(); + //s.setFlushMode(FlushMode.AUTO); // this does not throw (API is deprecated) + s.setHibernateFlushMode(FlushMode.AUTO); // this should not throw even within an inactive transaction + } + +}