diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/DataBO.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/DataBO.java
index e13c669478f1e279b1435b32848f66388cdb4872..5ce11efde0e61f2208ac98a83167faa51cf298a7 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/DataBO.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/DataBO.java
@@ -25,6 +25,8 @@ import java.util.LinkedHashSet;
 import java.util.List;
 import java.util.Set;
 
+import org.springframework.dao.DataAccessException;
+
 import ch.rinn.restrictions.Friend;
 import ch.systemsx.cisd.common.collections.CollectionUtils;
 import ch.systemsx.cisd.common.exceptions.UserFailureException;
@@ -530,7 +532,13 @@ public class DataBO extends AbstractDataSetBusinessObject implements IDataBO
 
     private void validateAndSave()
     {
-        getDataDAO().validateAndSaveUpdatedEntity(data);
+        try
+        {
+            getDataDAO().validateAndSaveUpdatedEntity(data);
+        } catch (final DataAccessException ex)
+        {
+            throwException(ex, String.format("Data Set '%s'", data.getCode()));
+        }
     }
 
     private void updateParents(String[] modifiedParentDatasetCodesOrNull)
@@ -593,7 +601,9 @@ public class DataBO extends AbstractDataSetBusinessObject implements IDataBO
             return;
         } else if (componentCodes.contains(data.getCode()))
         {
-            throw new UserFailureException("Data set '" + data.getCode()
+            throw new UserFailureException(
+                    "Data set '"
+                            + data.getCode()
                             + "' cannot contain itself as a component neither directly nor via subordinate components.");
         }