diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/resources/entities/Criterion.java b/navalplanner-business/src/main/java/org/navalplanner/business/resources/entities/Criterion.java
index 25532852f..b8e82ed7e 100644
--- a/navalplanner-business/src/main/java/org/navalplanner/business/resources/entities/Criterion.java
+++ b/navalplanner-business/src/main/java/org/navalplanner/business/resources/entities/Criterion.java
@@ -23,6 +23,12 @@ public class Criterion extends BaseEntity implements ICriterion {
private boolean active = true;
+ /*
+ * Just for Hibernate mapping in order to have an unique constraint with
+ * name and type properties.
+ */
+ private Long typeId;
+
public static Criterion ofType(CriterionType type) {
return new Criterion(type);
}
diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/resources/services/CriterionServiceImpl.java b/navalplanner-business/src/main/java/org/navalplanner/business/resources/services/CriterionServiceImpl.java
index 302b6f91d..aadbf9830 100644
--- a/navalplanner-business/src/main/java/org/navalplanner/business/resources/services/CriterionServiceImpl.java
+++ b/navalplanner-business/src/main/java/org/navalplanner/business/resources/services/CriterionServiceImpl.java
@@ -6,7 +6,6 @@ import java.util.Date;
import java.util.List;
import org.apache.commons.lang.Validate;
-import org.hibernate.validator.InvalidValue;
import org.navalplanner.business.common.exceptions.InstanceNotFoundException;
import org.navalplanner.business.common.exceptions.ValidationException;
import org.navalplanner.business.resources.daos.CriterionDAO;
@@ -79,16 +78,6 @@ public class CriterionServiceImpl implements ICriterionService {
}
criterionDAO.save(entity);
- if (criterionDAO.findByNameAndType(entity).size() > 1) {
-
- InvalidValue[] invalidValues = {
- new InvalidValue(entity.getName() + " already exists",
- Criterion.class, "name", entity.getName(), entity)
- };
-
- throw new ValidationException(invalidValues,
- "Couldn't save new criterion");
- }
}
private CriterionType saveCriterionType(CriterionType criterionType) throws ValidationException {
diff --git a/navalplanner-business/src/main/resources/org/navalplanner/business/resources/entities/Resources.hbm.xml b/navalplanner-business/src/main/resources/org/navalplanner/business/resources/entities/Resources.hbm.xml
index bd396599d..6c31907fc 100644
--- a/navalplanner-business/src/main/resources/org/navalplanner/business/resources/entities/Resources.hbm.xml
+++ b/navalplanner-business/src/main/resources/org/navalplanner/business/resources/entities/Resources.hbm.xml
@@ -36,6 +36,13 @@
+
+
+
+
+
+
diff --git a/navalplanner-business/src/test/java/org/navalplanner/business/test/resources/services/CriterionServiceTest.java b/navalplanner-business/src/test/java/org/navalplanner/business/test/resources/services/CriterionServiceTest.java
index 8eb333345..22284ebf0 100644
--- a/navalplanner-business/src/test/java/org/navalplanner/business/test/resources/services/CriterionServiceTest.java
+++ b/navalplanner-business/src/test/java/org/navalplanner/business/test/resources/services/CriterionServiceTest.java
@@ -114,7 +114,7 @@ public class CriterionServiceTest {
criterionService.save(criterion);
}
- @Test(expected=ValidationException.class)
+ @Test(expected = DataIntegrityViolationException.class)
@NotTransactional
public void testCannotExistTwoDifferentCriterionsWithSameNameAndType() throws ValidationException {
String unique = UUID.randomUUID().toString();