I’m using a for loop to iterate over persisted form objects on validation and then compare against non persisted form objects. I’m using .contains in the loop, however the first loop returns true and every other loop returns false even though the pr object doesn’t contain the prPersist object. Could someone tell me what I’m doing wrong, or if there is a better way to handle this? Thanks
Hibernate Entity
PurchaseRequest Object
@OneToMany(mappedBy = "purchaseRequest", cascade=CascadeType.ALL, orphanRemoval=true)
public List<LineItem> getLineItems() {
if(lineItems == null ){
lineItems = new ArrayList<LineItem>();
}
return lineItems;
}
public void setLineItems(List<LineItem> lineItems) {
this.lineItems = lineItems;
}
LineItem Object
@ManyToOne
@JoinColumn(name = "pr_id", nullable = false)
private PurchaseRequest purchaseRequest;
public PurchaseRequest getPurchaseRequest() {
return purchaseRequest;
}
public void setPurchaseRequest(PurchaseRequest purchaseRequest) {
this.purchaseRequest = purchaseRequest;
}
Page Class
private List<LineItem> lineItems;
private PurchaseRequest pr;
@Persist
private PurchaseRequest prPersist;
System.out.println("prPersist size " + prPersist != null ? prPersist.getLineItems().size() : "");
System.out.println("pr size outer loop " + pr.getLineItems().size());
if(prPersist != null) {
for(LineItem _lineItem : prPersist.getLineItems()) {
System.out.println("pr lineItem object value " + _lineItem.getQuantity());
System.out.println("pr lineItem size inner loop " + pr.getLineItems().size());
System.out.println("pr lineItem contains prPersist lineItem " + pr.getLineItems().contains(_lineItem));
if(!pr.getLineItems().contains(_lineItem)) {
_lineItem.setPurchaseRequest(pr);
pr.getLineItems().add(_lineItem);
System.out.println("new line item added");
}
}
prPersist = null;
}
Printout results
prPersist size 2
pr size outer loop 0
pr lineItem object value 4
pr lineItem size inner loop 0
pr lineItem contains prPersist lineItem false
new line item added
pr lineItem object value 5
pr lineItem size inner loop 1
pr lineItem contains prPersist lineItem true
Setting prPersist
void onValidate() {
prPersist = null;
if (form.getHasErrors()) {
prPersist = pr;
}
}
Given that
prPersistand ‘pr’ are different instances I’m guessing theLineItems each contains can be different instances?If so, I’d guess you’ve got a problem with you implementation of the
equalsmethod onLineItem.