diff --git a/src/main/java/org/olat/course/assessment/manager/EfficiencyStatementManager.java b/src/main/java/org/olat/course/assessment/manager/EfficiencyStatementManager.java
index 65c10223ca36198c8af4c89b81c309bfce520a98..2bd5faa8ba2b65cc192aca0af7715e83dc0ebcc3 100644
--- a/src/main/java/org/olat/course/assessment/manager/EfficiencyStatementManager.java
+++ b/src/main/java/org/olat/course/assessment/manager/EfficiencyStatementManager.java
@@ -34,7 +34,10 @@ import java.util.List;
 import java.util.Locale;
 import java.util.Map;
 
+import javax.persistence.PersistenceException;
+
 import org.apache.logging.log4j.Logger;
+import org.hibernate.exception.ConstraintViolationException;
 import org.olat.basesecurity.GroupRoles;
 import org.olat.basesecurity.IdentityRef;
 import org.olat.core.commons.persistence.DB;
@@ -220,7 +223,7 @@ public class EfficiencyStatementManager implements UserDataDeletable, UserDataEx
 				efficiencyProperty.setShortTitle(courseEnv.getRunStructure().getRootNode().getShortTitle());
 				efficiencyProperty.setTitle(courseEnv.getRunStructure().getRootNode().getLongTitle());
 				fillEfficiencyStatement(efficiencyStatement, lastModifications, efficiencyProperty);
-				dbInstance.getCurrentEntityManager().persist(efficiencyProperty);
+				efficiencyProperty = persistOrLoad(efficiencyProperty, repoEntry, assessedIdentity);
 				if (debug) {
 					log.debug("creating new efficiency statement property::{} for id::{} repoEntry:: {}",
 							efficiencyProperty.getKey(), assessedIdentity.getKey() , repoEntry.getKey());
@@ -254,6 +257,23 @@ public class EfficiencyStatementManager implements UserDataDeletable, UserDataEx
 		CoordinatorManager.getInstance().getCoordinator().getEventBus().fireEventToListenersOf(ace, courseOres);
 	}
 	
+	private UserEfficiencyStatementImpl persistOrLoad(UserEfficiencyStatementImpl efficiencyProperty, RepositoryEntry entry, Identity identity) {
+		try {
+			dbInstance.commit();
+			dbInstance.getCurrentEntityManager().persist(efficiencyProperty);
+			dbInstance.commit();
+		} catch(PersistenceException e) {
+			if(e.getCause() instanceof ConstraintViolationException) {
+				log.warn("", e);
+				dbInstance.rollback();
+				efficiencyProperty = getUserEfficiencyStatementFull(entry, identity);
+			} else {
+				log.error("", e);
+			}
+		}
+		return efficiencyProperty;
+	}
+	
 	public void fillEfficiencyStatement(EfficiencyStatement efficiencyStatement, AssessmentNodesLastModified lastModifications, UserEfficiencyStatementImpl efficiencyProperty) {
 		if(lastModifications != null) {
 			if(lastModifications.getLastUserModified() != null