[Bug #1108] Fix bug

There shouldn't be cascade from order element to labels because labels
are shared among orders. Due to this OptimistLockingExceptions were
being caused. Now the newly created label is explicitly saved instead
of relaying in the cascading behavior.

FEA: ItEr75S04BugFixing
This commit is contained in:
Manuel Rego Casasnovas 2011-07-15 14:05:28 +02:00 committed by Óscar González Fernández
parent deccff1d56
commit 11bdceedc5
3 changed files with 19 additions and 14 deletions

View file

@ -26,8 +26,7 @@
<one-to-many class="org.navalplanner.business.advance.entities.DirectAdvanceAssignment" />
</set>
<!-- Assess many-to-many bidireccional -->
<set name="labels" table="order_element_label" cascade="save-update">
<set name="labels" table="order_element_label" cascade="none">
<key column="order_element_id" not-null="true"/>
<many-to-many column="label_id" class="org.navalplanner.business.labels.entities.Label"/>
</set>

View file

@ -24,6 +24,8 @@ import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import org.navalplanner.business.common.IAdHocTransactionService;
import org.navalplanner.business.common.IOnTransaction;
import org.navalplanner.business.labels.daos.ILabelDAO;
import org.navalplanner.business.labels.entities.Label;
import org.navalplanner.business.labels.entities.LabelType;
@ -41,6 +43,9 @@ public abstract class AssignedLabelsModel<T> implements IAssignedLabelsModel<T>
private T element;
@Autowired
private IAdHocTransactionService adHocTransactionService;
@Transactional(readOnly = true)
public void init(T element) {
this.element = element;
@ -121,9 +126,19 @@ public abstract class AssignedLabelsModel<T> implements IAssignedLabelsModel<T>
return result;
}
public Label createLabel(String labelName, LabelType labelType) {
Label label = Label.create(labelName);
label.setType(labelType);
public Label createLabel(final String labelName,
final LabelType labelType) {
Label label = adHocTransactionService
.runOnAnotherTransaction(new IOnTransaction<Label>() {
@Override
public Label execute() {
Label label = Label.create(labelName);
label.setType(labelType);
labelDAO.save(label);
return label;
}
});
label.dontPoseAsTransientObjectAnymore();
addLabelToConversation(label);
return label;
}

View file

@ -26,7 +26,6 @@ import java.util.Collections;
import java.util.List;
import org.navalplanner.business.labels.entities.Label;
import org.navalplanner.business.labels.entities.LabelType;
import org.navalplanner.business.orders.daos.IOrderElementDAO;
import org.navalplanner.business.orders.entities.OrderElement;
import org.navalplanner.web.orders.IOrderModel;
@ -64,14 +63,6 @@ public class AssignedLabelsToOrderElementModel extends
return new ArrayList<Label>(orderElement.getLabels());
}
@Override
public Label createLabel(String labelName, LabelType labelType) {
Label label = Label.create(labelName);
label.setType(labelType);
orderModel.addLabel(label);
return label;
}
@Override
public void setOrderModel(IOrderModel orderModel) {
this.orderModel = orderModel;