ItEr42S17CUGravacionModelosUnidadesTraballoItEr41S20: Using loadOrderAvoidingProxyFor in order to avoid proxy problem.

The order was being loaded as a proxy of class OrderLineGroup, loadOrderAvoidingProxyFor avoids this problem.
This commit is contained in:
Óscar González Fernández 2010-01-05 17:00:35 +01:00
parent dbde962415
commit 08d0d6ec24
3 changed files with 31 additions and 8 deletions

View file

@ -64,6 +64,8 @@ public interface IOrderElementDAO extends IGenericDAO<OrderElement, Long> {
*/
public OrderElement findParent(OrderElement orderElement);
public void loadOrderAvoidingProxyFor(OrderElement orderElement);
/**
* Returns the number of assigned hours for an {@link OrderElement}
*

View file

@ -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<OrderElement, Long>
@Autowired
private ITaskSourceDAO taskSourceDAO;
@Autowired
private IAdHocTransactionService transactionService;
@Override
public List<OrderElement> findWithoutParent() {
Criteria c = getSession().createCriteria(OrderElement.class);
@ -97,6 +102,25 @@ public class OrderElementDAO extends GenericDAOHibernate<OrderElement, Long>
return (OrderElement) query.uniqueResult();
}
@Override
public void loadOrderAvoidingProxyFor(final OrderElement orderElement) {
OrderElement order = transactionService
.runOnAnotherTransaction(new IOnTransaction<OrderElement>() {
@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) {

View file

@ -52,6 +52,8 @@ public class OrderTemplatesModel implements IOrderTemplatesModel {
private OrderElementTemplate template;
private TemplatesTree treeModel;
@Override
public List<OrderElementTemplate> 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);
}
}