Avoid having Orders as proxies
It can cause ClassCastExceptions when doing orderElement.getOrder FEA: AnA08S10Reports
This commit is contained in:
parent
e1fe687623
commit
0413e0b3e1
3 changed files with 63 additions and 2 deletions
|
|
@ -38,4 +38,6 @@ public interface IWorkReportDAO extends IIntegrationEntityDAO<WorkReport> {
|
|||
|
||||
List<WorkReport> getAll();
|
||||
|
||||
List<WorkReport> allWorkReportsWithAssociatedOrdersUnproxied();
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -21,13 +21,22 @@
|
|||
|
||||
package org.navalplanner.business.workreports.daos;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
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.IntegrationEntityDAO;
|
||||
import org.navalplanner.business.orders.daos.IOrderDAO;
|
||||
import org.navalplanner.business.orders.entities.OrderElement;
|
||||
import org.navalplanner.business.workreports.entities.WorkReport;
|
||||
import org.navalplanner.business.workreports.entities.WorkReportType;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.beans.factory.config.BeanDefinition;
|
||||
import org.springframework.context.annotation.Scope;
|
||||
import org.springframework.stereotype.Repository;
|
||||
|
|
@ -42,6 +51,12 @@ import org.springframework.stereotype.Repository;
|
|||
public class WorkReportDAO extends IntegrationEntityDAO<WorkReport>
|
||||
implements IWorkReportDAO {
|
||||
|
||||
@Autowired
|
||||
private IAdHocTransactionService adHocTransactionService;
|
||||
|
||||
@Autowired
|
||||
private IOrderDAO orderDAO;
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
@Override
|
||||
public List<WorkReport> getAllByWorkReportType(WorkReportType workReportType) {
|
||||
|
|
@ -54,4 +69,38 @@ public class WorkReportDAO extends IntegrationEntityDAO<WorkReport>
|
|||
return list(WorkReport.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<WorkReport> allWorkReportsWithAssociatedOrdersUnproxied() {
|
||||
forceOrdersUnproxied();
|
||||
return list(WorkReport.class);
|
||||
}
|
||||
|
||||
private void forceOrdersUnproxied() {
|
||||
List<OrderElement> elements = adHocTransactionService
|
||||
.runOnAnotherReadOnlyTransaction(new IOnTransaction<List<OrderElement>>() {
|
||||
|
||||
@Override
|
||||
public List<OrderElement> execute() {
|
||||
return getOrderElementsAssociatedWithWorkReports();
|
||||
}
|
||||
});
|
||||
orderDAO.loadOrdersAvoidingProxyFor(elements);
|
||||
}
|
||||
|
||||
private List<OrderElement> getOrderElementsAssociatedWithWorkReports() {
|
||||
Set<OrderElement> result = new HashSet<OrderElement>();
|
||||
result.addAll(elementsFrom(getSession().createQuery(
|
||||
"select w.orderElement from WorkReport w")));
|
||||
result
|
||||
.addAll(elementsFrom(getSession()
|
||||
.createQuery(
|
||||
"select line.orderElement from WorkReport w JOIN w.workReportLines line")));
|
||||
return new ArrayList<OrderElement>(result);
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
private List<OrderElement> elementsFrom(Query orderElementsQuery) {
|
||||
return orderElementsQuery.list();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -40,11 +40,13 @@ import org.navalplanner.business.common.exceptions.ValidationException;
|
|||
import org.navalplanner.business.labels.daos.ILabelDAO;
|
||||
import org.navalplanner.business.labels.entities.Label;
|
||||
import org.navalplanner.business.labels.entities.LabelType;
|
||||
import org.navalplanner.business.orders.daos.IOrderDAO;
|
||||
import org.navalplanner.business.orders.daos.IOrderElementDAO;
|
||||
import org.navalplanner.business.orders.entities.OrderElement;
|
||||
import org.navalplanner.business.resources.daos.IWorkerDAO;
|
||||
import org.navalplanner.business.resources.entities.Resource;
|
||||
import org.navalplanner.business.resources.entities.Worker;
|
||||
import org.navalplanner.business.scenarios.IScenarioManager;
|
||||
import org.navalplanner.business.workreports.daos.IWorkReportDAO;
|
||||
import org.navalplanner.business.workreports.daos.IWorkReportTypeDAO;
|
||||
import org.navalplanner.business.workreports.entities.WorkReport;
|
||||
|
|
@ -82,12 +84,18 @@ public class WorkReportModel extends IntegrationEntityModel implements
|
|||
@Autowired
|
||||
private IOrderElementDAO orderElementDAO;
|
||||
|
||||
@Autowired
|
||||
private IOrderDAO orderDAO;
|
||||
|
||||
@Autowired
|
||||
private IWorkerDAO workerDAO;
|
||||
|
||||
@Autowired
|
||||
private ILabelDAO labelDAO;
|
||||
|
||||
@Autowired
|
||||
private IScenarioManager scenarioManager;
|
||||
|
||||
@Autowired
|
||||
private IConfigurationDAO configurationDAO;
|
||||
|
||||
|
|
@ -213,7 +221,7 @@ public class WorkReportModel extends IntegrationEntityModel implements
|
|||
private void forceLoadPrincipalDataWorkReportLines(WorkReportLine line) {
|
||||
line.getNumHours();
|
||||
line.getResource().getShortDescription();
|
||||
line.getOrderElement().getName();
|
||||
line.getOrderElement().getOrder();
|
||||
line.getTypeOfWorkHours().getName();
|
||||
}
|
||||
|
||||
|
|
@ -318,13 +326,15 @@ public class WorkReportModel extends IntegrationEntityModel implements
|
|||
|
||||
private List<WorkReport> getAllWorkReports() {
|
||||
List<WorkReport> result = new ArrayList<WorkReport>();
|
||||
for (WorkReport each : workReportDAO.list(WorkReport.class)) {
|
||||
for (WorkReport each : workReportDAO
|
||||
.allWorkReportsWithAssociatedOrdersUnproxied()) {
|
||||
each.getWorkReportType().getName();
|
||||
if (each.getResource() != null) {
|
||||
each.getResource().getShortDescription();
|
||||
}
|
||||
if (each.getOrderElement() != null) {
|
||||
each.getOrderElement().getName();
|
||||
each.getOrderElement().getOrder();
|
||||
}
|
||||
result.add(each);
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue