diff --git a/hibernate-core/src/main/java/org/hibernate/internal/AbstractSharedSessionContract.java b/hibernate-core/src/main/java/org/hibernate/internal/AbstractSharedSessionContract.java index df6184cb904b..98c85013a336 100644 --- a/hibernate-core/src/main/java/org/hibernate/internal/AbstractSharedSessionContract.java +++ b/hibernate-core/src/main/java/org/hibernate/internal/AbstractSharedSessionContract.java @@ -326,7 +326,7 @@ protected void cleanupOnClose() { @Override public void checkOpen(boolean markForRollbackIfClosed) { if ( isClosed() ) { - if ( markForRollbackIfClosed ) { + if ( markForRollbackIfClosed && transactionCoordinator.isTransactionActive() ) { markForRollbackOnly(); } throw new IllegalStateException( "Session/EntityManager is closed" ); @@ -337,10 +337,6 @@ protected void checkOpenOrWaitingForAutoClose() { if ( !waitingForAutoClose ) { checkOpen(); } - else if ( factory.isClosed() ) { - markForRollbackOnly(); - throw new IllegalStateException( "SessionFactory is closed" ); - } } /** 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 e354db822f9b..fa94c093650a 100644 --- a/hibernate-core/src/main/java/org/hibernate/internal/SessionImpl.java +++ b/hibernate-core/src/main/java/org/hibernate/internal/SessionImpl.java @@ -510,7 +510,7 @@ private void managedClose() { @Override public Connection connection() throws HibernateException { - checkOpen(); + checkOpenOrWaitingForAutoClose(); return getJdbcCoordinator().getLogicalConnection().getPhysicalConnection(); } @@ -531,7 +531,7 @@ public void reconnect(Connection conn) throws HibernateException { @Override public void setAutoClear(boolean enabled) { - checkOpen(); + checkOpenOrWaitingForAutoClose(); autoClear = enabled; } @@ -1462,7 +1462,7 @@ public void forceFlush(EntityEntry entityEntry) throws HibernateException { @Override public List list(String query, QueryParameters queryParameters) throws HibernateException { - checkOpen(); + checkOpenOrWaitingForAutoClose(); checkTransactionSynchStatus(); queryParameters.validateParameters(); @@ -1491,7 +1491,7 @@ public List list(String query, QueryParameters queryParameters) throws Hibernate @Override public int executeUpdate(String query, QueryParameters queryParameters) throws HibernateException { - checkOpen(); + checkOpenOrWaitingForAutoClose(); checkTransactionSynchStatus(); queryParameters.validateParameters(); HQLQueryPlan plan = getQueryPlan( query, false ); @@ -1514,7 +1514,7 @@ public int executeUpdate(String query, QueryParameters queryParameters) throws H public int executeNativeUpdate( NativeSQLQuerySpecification nativeQuerySpecification, QueryParameters queryParameters) throws HibernateException { - checkOpen(); + checkOpenOrWaitingForAutoClose(); checkTransactionSynchStatus(); queryParameters.validateParameters(); NativeSQLQueryPlan plan = getNativeQueryPlan( nativeQuerySpecification ); @@ -1537,7 +1537,7 @@ public int executeNativeUpdate( @Override public Iterator iterate(String query, QueryParameters queryParameters) throws HibernateException { - checkOpen(); + checkOpenOrWaitingForAutoClose(); checkTransactionSynchStatus(); queryParameters.validateParameters(); @@ -1560,7 +1560,7 @@ public Iterator iterate(String query, QueryParameters queryParameters) throws Hi @Override public ScrollableResultsImplementor scroll(String query, QueryParameters queryParameters) throws HibernateException { - checkOpen(); + checkOpenOrWaitingForAutoClose(); checkTransactionSynchStatus(); HQLQueryPlan plan = queryParameters.getQueryPlan(); @@ -1754,7 +1754,7 @@ private FilterQueryPlan getFilterQueryPlan( @Override public List listFilter(Object collection, String filter, QueryParameters queryParameters) { - checkOpen(); + checkOpenOrWaitingForAutoClose(); checkTransactionSynchStatus(); FilterQueryPlan plan = getFilterQueryPlan( collection, filter, queryParameters, false ); List results = Collections.EMPTY_LIST; @@ -1775,7 +1775,7 @@ public List listFilter(Object collection, String filter, QueryParameters queryPa @Override public Iterator iterateFilter(Object collection, String filter, QueryParameters queryParameters) { - checkOpen(); + checkOpenOrWaitingForAutoClose(); checkTransactionSynchStatus(); FilterQueryPlan plan = getFilterQueryPlan( collection, filter, queryParameters, true ); Iterator itr = plan.performIterate( queryParameters, this ); @@ -1820,7 +1820,7 @@ public ScrollableResultsImplementor scroll(Criteria criteria, ScrollMode scrollM // TODO: Is this guaranteed to always be CriteriaImpl? CriteriaImpl criteriaImpl = (CriteriaImpl) criteria; - checkOpen(); + checkOpenOrWaitingForAutoClose(); checkTransactionSynchStatus(); String entityName = criteriaImpl.getEntityOrClassName(); @@ -1857,7 +1857,7 @@ public List list(Criteria criteria) throws HibernateException { } - checkOpen(); + checkOpenOrWaitingForAutoClose(); // checkTransactionSynchStatus(); String[] implementors = getFactory().getMetamodel().getImplementors( criteriaImpl.getEntityOrClassName() ); @@ -2112,7 +2112,7 @@ public ProcedureCall createStoredProcedureCall(String procedureName, Class... re @Override public ScrollableResultsImplementor scrollCustomQuery(CustomQuery customQuery, QueryParameters queryParameters) { - checkOpen(); + checkOpenOrWaitingForAutoClose(); // checkTransactionSynchStatus(); if ( log.isTraceEnabled() ) { @@ -2136,7 +2136,7 @@ public ScrollableResultsImplementor scrollCustomQuery(CustomQuery customQuery, Q // basically just an adapted copy of find(CriteriaImpl) @Override public List listCustomQuery(CustomQuery customQuery, QueryParameters queryParameters) { - checkOpen(); + checkOpenOrWaitingForAutoClose(); // checkTransactionSynchStatus(); if ( log.isTraceEnabled() ) { @@ -2225,7 +2225,7 @@ private void throwTransientObjectException(Object object) throws HibernateExcept @Override public String guessEntityName(Object object) throws HibernateException { - checkOpen(); + checkOpenOrWaitingForAutoClose(); return getEntityNameResolver().resolveEntityName( object ); }