Skip to content

Commit 7f35c44

Browse files
committed
DATAMONGO-527 - Fixed Criteria.equals(…).
1 parent 114489d commit 7f35c44

File tree

2 files changed

+34
-5
lines changed
  • spring-data-mongodb/src

2 files changed

+34
-5
lines changed

spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/query/Criteria.java

+22-3
Original file line numberDiff line numberDiff line change
@@ -514,9 +514,28 @@ public boolean equals(Object obj) {
514514

515515
Criteria that = (Criteria) obj;
516516

517-
boolean keyEqual = this.key == null ? that.key == null : this.key.equals(that.key);
518-
boolean criteriaEqual = this.criteria.equals(that.criteria);
519-
boolean valueEqual = isEqual(this.isValue, that.isValue);
517+
if (this.criteriaChain.size() != that.criteriaChain.size()) {
518+
return false;
519+
}
520+
521+
for (int i = 0; i < this.criteriaChain.size(); i++) {
522+
523+
Criteria left = this.criteriaChain.get(i);
524+
Criteria right = that.criteriaChain.get(i);
525+
526+
if (!simpleCriteriaEquals(left, right)) {
527+
return false;
528+
}
529+
}
530+
531+
return true;
532+
}
533+
534+
private boolean simpleCriteriaEquals(Criteria left, Criteria right) {
535+
536+
boolean keyEqual = left.key == null ? right.key == null : left.key.equals(right.key);
537+
boolean criteriaEqual = left.criteria.equals(right.criteria);
538+
boolean valueEqual = isEqual(left.isValue, right.isValue);
520539

521540
return keyEqual && criteriaEqual && valueEqual;
522541
}

spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/query/CriteriaTests.java

+12-2
Original file line numberDiff line numberDiff line change
@@ -15,11 +15,11 @@
1515
*/
1616
package org.springframework.data.mongodb.core.query;
1717

18-
import static org.junit.Assert.*;
1918
import static org.hamcrest.CoreMatchers.*;
19+
import static org.junit.Assert.*;
20+
2021
import org.junit.Test;
2122
import org.springframework.data.mongodb.InvalidMongoDbApiUsageException;
22-
import org.springframework.data.mongodb.core.query.Criteria;
2323

2424
import com.mongodb.BasicDBObject;
2525
import com.mongodb.DBObject;
@@ -58,4 +58,14 @@ public void testCriteriaWithMultipleConditionsForSameKey() {
5858
Criteria c = new Criteria("name").gte("M").and("name").ne("A");
5959
c.getCriteriaObject();
6060
}
61+
62+
@Test
63+
public void equalIfCriteriaMatches() {
64+
65+
Criteria left = new Criteria("name").is("Foo").and("lastname").is("Bar");
66+
Criteria right = new Criteria("name").is("Bar").and("lastname").is("Bar");
67+
68+
assertThat(left, is(not(right)));
69+
assertThat(right, is(not(left)));
70+
}
6171
}

0 commit comments

Comments
 (0)