From 08d0d6ec2450c320d98f70faeb01a2abec39e4fc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=93scar=20Gonz=C3=A1lez=20Fern=C3=A1ndez?= Date: Tue, 5 Jan 2010 17:00:35 +0100 Subject: [PATCH] ItEr42S17CUGravacionModelosUnidadesTraballoItEr41S20: Using loadOrderAvoidingProxyFor in order to avoid proxy problem. The order was being loaded as a proxy of class OrderLineGroup, loadOrderAvoidingProxyFor avoids this problem. --- .../orders/daos/IOrderElementDAO.java | 2 ++ .../business/orders/daos/OrderElementDAO.java | 24 +++++++++++++++++++ .../web/templates/OrderTemplatesModel.java | 13 ++++------ 3 files changed, 31 insertions(+), 8 deletions(-) diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/orders/daos/IOrderElementDAO.java b/navalplanner-business/src/main/java/org/navalplanner/business/orders/daos/IOrderElementDAO.java index c62903dab..58740a966 100644 --- a/navalplanner-business/src/main/java/org/navalplanner/business/orders/daos/IOrderElementDAO.java +++ b/navalplanner-business/src/main/java/org/navalplanner/business/orders/daos/IOrderElementDAO.java @@ -64,6 +64,8 @@ public interface IOrderElementDAO extends IGenericDAO { */ public OrderElement findParent(OrderElement orderElement); + public void loadOrderAvoidingProxyFor(OrderElement orderElement); + /** * Returns the number of assigned hours for an {@link OrderElement} * diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/orders/daos/OrderElementDAO.java b/navalplanner-business/src/main/java/org/navalplanner/business/orders/daos/OrderElementDAO.java index 38406315a..63cd937bf 100644 --- a/navalplanner-business/src/main/java/org/navalplanner/business/orders/daos/OrderElementDAO.java +++ b/navalplanner-business/src/main/java/org/navalplanner/business/orders/daos/OrderElementDAO.java @@ -28,6 +28,8 @@ import java.util.List; import org.hibernate.Criteria; import org.hibernate.Query; import org.hibernate.criterion.Restrictions; +import org.navalplanner.business.common.IAdHocTransactionService; +import org.navalplanner.business.common.IOnTransaction; import org.navalplanner.business.common.daos.GenericDAOHibernate; import org.navalplanner.business.common.exceptions.InstanceNotFoundException; import org.navalplanner.business.orders.entities.OrderElement; @@ -60,6 +62,9 @@ public class OrderElementDAO extends GenericDAOHibernate @Autowired private ITaskSourceDAO taskSourceDAO; + @Autowired + private IAdHocTransactionService transactionService; + @Override public List findWithoutParent() { Criteria c = getSession().createCriteria(OrderElement.class); @@ -97,6 +102,25 @@ public class OrderElementDAO extends GenericDAOHibernate return (OrderElement) query.uniqueResult(); } + @Override + public void loadOrderAvoidingProxyFor(final OrderElement orderElement) { + OrderElement order = transactionService + .runOnAnotherTransaction(new IOnTransaction() { + + @Override + public OrderElement execute() { + OrderElement current = orderElement; + OrderElement result = current; + while (current != null) { + result = current; + current = findParent(current); + } + return result; + } + }); + findExistingEntity(order.getId()); + } + @Override @Transactional(readOnly = true) public int getAssignedHours(OrderElement orderElement) { diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/templates/OrderTemplatesModel.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/templates/OrderTemplatesModel.java index 24848f6c9..df2a642bf 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/templates/OrderTemplatesModel.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/templates/OrderTemplatesModel.java @@ -52,6 +52,8 @@ public class OrderTemplatesModel implements IOrderTemplatesModel { private OrderElementTemplate template; + private TemplatesTree treeModel; + @Override public List getRootTemplates() { return dao.getRootTemplates(); @@ -86,23 +88,18 @@ public class OrderTemplatesModel implements IOrderTemplatesModel { @Override @Transactional(readOnly = true) public void createTemplateFrom(OrderElement orderElement) { - loadParentsInOrderToAvoidProxies(orderElement); + orderElementDAO.loadOrderAvoidingProxyFor(orderElement); OrderElement reloaded = orderElementDAO .findExistingEntity(orderElement.getId()); template = reloaded.createTemplate(); - } - - private void loadParentsInOrderToAvoidProxies(OrderElement orderElement) { - OrderElement current = orderElement; - while (current != null) { - current = orderElementDAO.findParent(current); - } + treeModel = new TemplatesTree(template); } @Override @Transactional(readOnly = true) public void initEdit(OrderElementTemplate template) { this.template = dao.findExistingEntity(template.getId()); + treeModel = new TemplatesTree(this.template); } }