@Override protected void doCleanupAfterCompletion(final Object transaction) { try { super.doCleanupAfterCompletion(transaction); } finally { JdbcTransactionObjectSupport transactionObj = (JdbcTransactionObjectSupport) transaction; EntityManager em = _newTransactionObjects.remove(transactionObj); if (em != null) { EntityManagerHolder holder = (EntityManagerHolder) TransactionSynchronizationManager.unbindResource(getEntityManagerFactory()); LOGGER.debug( "doCleanupAfterCompletion() unbound holder [{}] and removed transactionObj [{}]", holder, transactionObj); } } }