From 87eebbfb6e2ba9d31fa0266e804bcdbeeb17666c Mon Sep 17 00:00:00 2001
From: srosse <none@none>
Date: Wed, 13 Dec 2017 10:36:44 +0100
Subject: [PATCH] OO-3204: make sure the invitation to delete is not detached
 from hibernate session

---
 .../org/olat/portfolio/manager/InvitationDAO.java    | 12 +++++++-----
 .../olat/portfolio/manager/InvitationDAOTest.java    |  3 +--
 2 files changed, 8 insertions(+), 7 deletions(-)

diff --git a/src/main/java/org/olat/portfolio/manager/InvitationDAO.java b/src/main/java/org/olat/portfolio/manager/InvitationDAO.java
index e29e750efe2..cfba3cf6a7a 100644
--- a/src/main/java/org/olat/portfolio/manager/InvitationDAO.java
+++ b/src/main/java/org/olat/portfolio/manager/InvitationDAO.java
@@ -303,7 +303,7 @@ public class InvitationDAO {
 		cal.add(Calendar.HOUR, -6);
 		Date dateLimit = cal.getTime();
 
-		StringBuilder sb = new StringBuilder();
+		StringBuilder sb = new StringBuilder(512);
 		sb.append("select invitation from ").append(InvitationImpl.class.getName()).append(" as invitation ")
 		  .append(" inner join invitation.baseGroup baseGroup ")
 		  .append(" where invitation.creationDate<:dateLimit")//someone can create an invitation but not add it to a policy within millisecond
@@ -331,15 +331,17 @@ public class InvitationDAO {
 			//normally only one identity
 			for(Identity identity:identities) {
 				if(identity.getStatus().compareTo(Identity.STATUS_VISIBLE_LIMIT) >= 0) {
-	  			//already deleted
+					//already deleted
 				} else if(securityManager.isIdentityInSecurityGroup(identity, olatUserSecGroup)) {
-	  			//out of scope
+					//out of scope
 				} else {
-	  			//delete user
+					//delete user
 					UserDeletionManager.getInstance().deleteIdentity(identity);
 				}
 			}
-			dbInstance.getCurrentEntityManager().remove(invitation);
+			Invitation invitationRef = dbInstance.getCurrentEntityManager()
+				.getReference(InvitationImpl.class, invitation.getKey());
+			dbInstance.getCurrentEntityManager().remove(invitationRef);
 			dbInstance.commit();
 		}
 	}
diff --git a/src/test/java/org/olat/portfolio/manager/InvitationDAOTest.java b/src/test/java/org/olat/portfolio/manager/InvitationDAOTest.java
index ce0dd0e13fc..3a351d06a32 100644
--- a/src/test/java/org/olat/portfolio/manager/InvitationDAOTest.java
+++ b/src/test/java/org/olat/portfolio/manager/InvitationDAOTest.java
@@ -213,12 +213,11 @@ public class InvitationDAOTest extends OlatTestCase {
 		
 		//clean the invitations
 		invitationDao.cleanUpInvitations();
+		dbInstance.commitAndCloseSession();
 		
 		//check that the invitation not was not deleted
 		boolean afterVisible = epFrontendManager.isMapVisible(invitee, map.getOlatResource());
 		Assert.assertTrue(afterVisible);
 	}
-	
-	
 
 }
-- 
GitLab