Browse Source

DATAMONGO-527 - Fixed Criteria.equals(…).

pull/11/merge
Oliver Gierke 13 years ago
parent
commit
7f35c4430d
  1. 25
      spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/query/Criteria.java
  2. 14
      spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/query/CriteriaTests.java

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

@ -514,9 +514,28 @@ public class Criteria implements CriteriaDefinition {
Criteria that = (Criteria) obj; Criteria that = (Criteria) obj;
boolean keyEqual = this.key == null ? that.key == null : this.key.equals(that.key); if (this.criteriaChain.size() != that.criteriaChain.size()) {
boolean criteriaEqual = this.criteria.equals(that.criteria); return false;
boolean valueEqual = isEqual(this.isValue, that.isValue); }
for (int i = 0; i < this.criteriaChain.size(); i++) {
Criteria left = this.criteriaChain.get(i);
Criteria right = that.criteriaChain.get(i);
if (!simpleCriteriaEquals(left, right)) {
return false;
}
}
return true;
}
private boolean simpleCriteriaEquals(Criteria left, Criteria right) {
boolean keyEqual = left.key == null ? right.key == null : left.key.equals(right.key);
boolean criteriaEqual = left.criteria.equals(right.criteria);
boolean valueEqual = isEqual(left.isValue, right.isValue);
return keyEqual && criteriaEqual && valueEqual; return keyEqual && criteriaEqual && valueEqual;
} }

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

@ -15,11 +15,11 @@
*/ */
package org.springframework.data.mongodb.core.query; package org.springframework.data.mongodb.core.query;
import static org.junit.Assert.*;
import static org.hamcrest.CoreMatchers.*; import static org.hamcrest.CoreMatchers.*;
import static org.junit.Assert.*;
import org.junit.Test; import org.junit.Test;
import org.springframework.data.mongodb.InvalidMongoDbApiUsageException; import org.springframework.data.mongodb.InvalidMongoDbApiUsageException;
import org.springframework.data.mongodb.core.query.Criteria;
import com.mongodb.BasicDBObject; import com.mongodb.BasicDBObject;
import com.mongodb.DBObject; import com.mongodb.DBObject;
@ -58,4 +58,14 @@ public class CriteriaTests {
Criteria c = new Criteria("name").gte("M").and("name").ne("A"); Criteria c = new Criteria("name").gte("M").and("name").ne("A");
c.getCriteriaObject(); c.getCriteriaObject();
} }
@Test
public void equalIfCriteriaMatches() {
Criteria left = new Criteria("name").is("Foo").and("lastname").is("Bar");
Criteria right = new Criteria("name").is("Bar").and("lastname").is("Bar");
assertThat(left, is(not(right)));
assertThat(right, is(not(left)));
}
} }

Loading…
Cancel
Save