Index: lams_common/src/java/org/lamsfoundation/lams/qb/model/QbQuestion.java =================================================================== diff -u -r6027dca0125bccd15dcdae16bc108177f85e7f73 -rb58f96e55bbc04e78723b11b77b2159aac191239 --- lams_common/src/java/org/lamsfoundation/lams/qb/model/QbQuestion.java (.../QbQuestion.java) (revision 6027dca0125bccd15dcdae16bc108177f85e7f73) +++ lams_common/src/java/org/lamsfoundation/lams/qb/model/QbQuestion.java (.../QbQuestion.java) (revision b58f96e55bbc04e78723b11b77b2159aac191239) @@ -165,7 +165,7 @@ @Cache(usage = CacheConcurrencyStrategy.TRANSACTIONAL) private List qbOptions = new ArrayList<>(); - @OneToMany(mappedBy = "qbQuestion", cascade = CascadeType.ALL, orphanRemoval = true, fetch = FetchType.EAGER) + @OneToMany(mappedBy = "qbQuestion", cascade = CascadeType.ALL, fetch = FetchType.EAGER) @Fetch(FetchMode.SELECT) @Cache(usage = CacheConcurrencyStrategy.TRANSACTIONAL) private List units = new ArrayList<>(); Index: lams_common/src/java/org/lamsfoundation/lams/qb/model/QbQuestionUnit.java =================================================================== diff -u -r2188972474f8d186d6811e3dea2e4136be669335 -rb58f96e55bbc04e78723b11b77b2159aac191239 --- lams_common/src/java/org/lamsfoundation/lams/qb/model/QbQuestionUnit.java (.../QbQuestionUnit.java) (revision 2188972474f8d186d6811e3dea2e4136be669335) +++ lams_common/src/java/org/lamsfoundation/lams/qb/model/QbQuestionUnit.java (.../QbQuestionUnit.java) (revision b58f96e55bbc04e78723b11b77b2159aac191239) @@ -2,7 +2,6 @@ import java.io.Serializable; -import javax.persistence.Cacheable; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; @@ -32,7 +31,7 @@ @Column private String name; - + @Column private float multiplier = 0; @@ -65,7 +64,7 @@ @Override public int hashCode() { - return new HashCodeBuilder().append(this.name).append(this.multiplier).toHashCode(); + return new HashCodeBuilder().append(this.name).append(this.multiplier).append(this.displayOrder).toHashCode(); } @Override Index: lams_common/src/java/org/lamsfoundation/lams/qb/service/QbService.java =================================================================== diff -u -r6027dca0125bccd15dcdae16bc108177f85e7f73 -rb58f96e55bbc04e78723b11b77b2159aac191239 --- lams_common/src/java/org/lamsfoundation/lams/qb/service/QbService.java (.../QbService.java) (revision 6027dca0125bccd15dcdae16bc108177f85e7f73) +++ lams_common/src/java/org/lamsfoundation/lams/qb/service/QbService.java (.../QbService.java) (revision b58f96e55bbc04e78723b11b77b2159aac191239) @@ -995,14 +995,29 @@ } // set units if (type == QbQuestion.TYPE_NUMERICAL) { - Set unitList = getUnitsFromRequest(request, true); - qbQuestion.getUnits().clear(); + Set unitsFromRequest = getUnitsFromRequest(request, true); + List existingUnits = qbQuestion.getUnits(); + List newUnits = new ArrayList<>(); int displayOrder = 0; - for (QbQuestionUnit unit : unitList) { + for (QbQuestionUnit unit : unitsFromRequest) { unit.setQbQuestion(qbQuestion); unit.setDisplayOrder(displayOrder++); - qbQuestion.getUnits().add(unit); + newUnits.add(unit); } + qbQuestion.setUnits(newUnits); + + for (QbQuestionUnit existingUnit : existingUnits) { + boolean unitFound = false; + for (QbQuestionUnit unit : newUnits) { + if (unit.getUid() != null && unit.getUid().equals(existingUnit.getUid())) { + unitFound = true; + break; + } + } + if (!unitFound) { + qbDAO.delete(existingUnit); + } + } } return qbQuestion.isQbQuestionModified(oldQuestion);