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:
parent
dbde962415
commit
08d0d6ec24
3 changed files with 31 additions and 8 deletions
|
|
@ -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}
|
||||
*
|
||||
|
|
|
|||
|
|
@ -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) {
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue