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 0ab84f53d8..d8bddacf9b 100644 --- a/hibernate-core/src/main/java/org/hibernate/internal/SessionImpl.java +++ b/hibernate-core/src/main/java/org/hibernate/internal/SessionImpl.java @@ -740,21 +740,23 @@ private void fireLock(LockEvent event) { @Override public void persist(String entityName, Object object) throws HibernateException { + checkOpen(); firePersist( new PersistEvent( entityName, object, this ) ); } @Override public void persist(Object object) throws HibernateException { - persist( null, object ); + checkOpen(); + firePersist( new PersistEvent( null, object, this ) ); } @Override public void persist(String entityName, Object object, Map copiedAlready) throws HibernateException { + checkOpenOrWaitingForAutoClose(); firePersist( copiedAlready, new PersistEvent( entityName, object, this ) ); } private void firePersist(PersistEvent event) { - checkOpen(); try { checkTransactionSynchStatus(); checkNoUnresolvedActionsBeforeOperation(); @@ -780,7 +782,6 @@ private void firePersist(PersistEvent event) { } private void firePersist(Map copiedAlready, PersistEvent event) { - checkOpen(); checkTransactionSynchStatus(); try { @@ -841,21 +842,23 @@ private void firePersistOnFlush(PersistEvent event) { @Override public Object merge(String entityName, Object object) throws HibernateException { + checkOpen(); return fireMerge( new MergeEvent( entityName, object, this ) ); } @Override public Object merge(Object object) throws HibernateException { - return merge( null, object ); + checkOpen(); + return fireMerge( new MergeEvent( null, object, this )); } @Override public void merge(String entityName, Object object, Map copiedAlready) throws HibernateException { + checkOpenOrWaitingForAutoClose(); fireMerge( copiedAlready, new MergeEvent( entityName, object, this ) ); } private Object fireMerge(MergeEvent event) { - checkOpen(); try { checkTransactionSynchStatus(); checkNoUnresolvedActionsBeforeOperation(); @@ -879,8 +882,6 @@ private Object fireMerge(MergeEvent event) { } private void fireMerge(Map copiedAlready, MergeEvent event) { - checkOpen(); - try { checkTransactionSynchStatus(); for ( MergeEventListener listener : listeners( EventType.MERGE ) ) { @@ -907,17 +908,20 @@ private void fireMerge(Map copiedAlready, MergeEvent event) { @Override public void delete(Object object) throws HibernateException { + checkOpen(); fireDelete( new DeleteEvent( object, this ) ); } @Override public void delete(String entityName, Object object) throws HibernateException { + checkOpen(); fireDelete( new DeleteEvent( entityName, object, this ) ); } @Override public void delete(String entityName, Object object, boolean isCascadeDeleteEnabled, Set transientEntities) throws HibernateException { + checkOpenOrWaitingForAutoClose(); if ( TRACE_ENABLED && persistenceContext.isRemovingOrphanBeforeUpates() ) { logRemoveOrphanBeforeUpdates( "beforeQuery continuing", entityName, object ); } @@ -945,6 +949,7 @@ public void removeOrphanBeforeUpdates(String entityName, Object child) { } persistenceContext.beginRemoveOrphanBeforeUpdates(); try { + checkOpenOrWaitingForAutoClose(); fireDelete( new DeleteEvent( entityName, child, false, true, this ) ); } finally { @@ -965,7 +970,6 @@ private void logRemoveOrphanBeforeUpdates(String timing, String entityName, Obje } private void fireDelete(DeleteEvent event) { - checkOpen(); try{ checkTransactionSynchStatus(); for ( DeleteEventListener listener : listeners( EventType.DELETE ) ) { @@ -988,7 +992,6 @@ private void fireDelete(DeleteEvent event) { } private void fireDelete(DeleteEvent event, Set transientEntities) { - checkOpen(); try{ checkTransactionSynchStatus(); for ( DeleteEventListener listener : listeners( EventType.DELETE ) ) { @@ -1235,31 +1238,37 @@ private void fireResolveNaturalId(ResolveNaturalIdEvent event) { @Override public void refresh(Object object) throws HibernateException { - refresh( null, object ); + checkOpen(); + fireRefresh( new RefreshEvent( null, object, this ) ); } @Override public void refresh(String entityName, Object object) throws HibernateException { + checkOpen(); fireRefresh( new RefreshEvent( entityName, object, this ) ); } @Override public void refresh(Object object, LockMode lockMode) throws HibernateException { + checkOpen(); fireRefresh( new RefreshEvent( object, lockMode, this ) ); } @Override public void refresh(Object object, LockOptions lockOptions) throws HibernateException { + checkOpen(); refresh( null, object, lockOptions ); } @Override public void refresh(String entityName, Object object, LockOptions lockOptions) throws HibernateException { + checkOpen(); fireRefresh( new RefreshEvent( entityName, object, lockOptions, this ) ); } @Override public void refresh(String entityName, Object object, Map refreshedAlready) throws HibernateException { + checkOpenOrWaitingForAutoClose(); fireRefresh( refreshedAlready, new RefreshEvent( entityName, object, this ) ); } @@ -1277,7 +1286,6 @@ private void fireRefresh(RefreshEvent event) { } } } - checkOpen(); checkTransactionSynchStatus(); for ( RefreshEventListener listener : listeners( EventType.REFRESH ) ) { listener.onRefresh( event ); @@ -1299,7 +1307,6 @@ private void fireRefresh(RefreshEvent event) { private void fireRefresh(Map refreshedAlready, RefreshEvent event) { try { - checkOpen(); checkTransactionSynchStatus(); for ( RefreshEventListener listener : listeners( EventType.REFRESH ) ) { listener.onRefresh( event, refreshedAlready );