diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/orders/daos/HoursGroupDAO.java b/navalplanner-business/src/main/java/org/navalplanner/business/orders/daos/HoursGroupDAO.java index 1f231bf99..5fc1d0091 100644 --- a/navalplanner-business/src/main/java/org/navalplanner/business/orders/daos/HoursGroupDAO.java +++ b/navalplanner-business/src/main/java/org/navalplanner/business/orders/daos/HoursGroupDAO.java @@ -22,6 +22,7 @@ package org.navalplanner.business.orders.daos; import org.apache.commons.lang.Validate; import org.hibernate.Criteria; +import org.hibernate.HibernateException; import org.hibernate.criterion.Restrictions; import org.navalplanner.business.common.daos.GenericDAOHibernate; import org.navalplanner.business.common.exceptions.InstanceNotFoundException; @@ -72,7 +73,13 @@ public class HoursGroupDAO extends GenericDAOHibernate Criteria c = getSession().createCriteria(HoursGroup.class); c.add(Restrictions.eq("code", hoursGroup.getCode())); - HoursGroup result = (HoursGroup) c.uniqueResult(); + HoursGroup result; + try { + result = (HoursGroup) c.uniqueResult(); + } catch (HibernateException e) { + result = (HoursGroup) c.list().get(0); + } + if (result == null) { throw new InstanceNotFoundException(hoursGroup.getCode(), HoursGroup.class.getName()); diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/orders/entities/Order.java b/navalplanner-business/src/main/java/org/navalplanner/business/orders/entities/Order.java index 306189c83..6aacba626 100644 --- a/navalplanner-business/src/main/java/org/navalplanner/business/orders/entities/Order.java +++ b/navalplanner-business/src/main/java/org/navalplanner/business/orders/entities/Order.java @@ -357,4 +357,19 @@ public class Order extends OrderLineGroup { } } + @AssertTrue(message = "some code is repeated between hours group codes") + public boolean checkConstraintHoursGroupCodeNotRepeated() { + Set codes = new HashSet(); + + for (HoursGroup hoursGroup : getHoursGroups()) { + String code = hoursGroup.getCode(); + if (codes.contains(code)) { + return false; + } + codes.add(code); + } + + return true; + } + } diff --git a/navalplanner-webapp/src/test/java/org/navalplanner/web/orders/OrderModelTest.java b/navalplanner-webapp/src/test/java/org/navalplanner/web/orders/OrderModelTest.java index 2858d764f..a5710a741 100644 --- a/navalplanner-webapp/src/test/java/org/navalplanner/web/orders/OrderModelTest.java +++ b/navalplanner-webapp/src/test/java/org/navalplanner/web/orders/OrderModelTest.java @@ -305,7 +305,7 @@ public class OrderModelTest { result.setCode("code-" + UUID.randomUUID()); HoursGroup hoursGroup = HoursGroup.create(result); - hoursGroup.setCode("hoursGroupName"); + hoursGroup.setCode("hoursGroupCode-" + UUID.randomUUID()); hoursGroup.setWorkingHours(0); result.addHoursGroup(hoursGroup);