diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/query/Term.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/query/Term.java index ed51e4b400..379445a84c 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/query/Term.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/query/Term.java @@ -15,6 +15,7 @@ */ package org.springframework.data.mongodb.core.query; +import java.util.Objects; import org.springframework.lang.Nullable; /** @@ -102,4 +103,19 @@ protected String quotePhrase(String raw) { protected String negateRaw(String raw) { return "-" + raw; } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (!(o instanceof Term)) return false; + Term term = (Term) o; + return negated == term.negated && + type == term.type && + Objects.equals(raw, term.raw); + } + + @Override + public int hashCode() { + return Objects.hash(type, raw, negated); + } } diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/query/TextCriteria.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/query/TextCriteria.java index 66aca4cf0e..8c98860640 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/query/TextCriteria.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/query/TextCriteria.java @@ -17,6 +17,7 @@ import java.util.ArrayList; import java.util.List; +import java.util.Objects; import org.bson.Document; import org.springframework.lang.Nullable; @@ -243,4 +244,21 @@ private String join(Iterable terms) { return StringUtils.collectionToDelimitedString(result, " "); } + + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (!(o instanceof TextCriteria)) return false; + TextCriteria that = (TextCriteria) o; + return Objects.equals(terms, that.terms) && + Objects.equals(language, that.language) && + Objects.equals(caseSensitive, that.caseSensitive) && + Objects.equals(diacriticSensitive, that.diacriticSensitive); + } + + @Override + public int hashCode() { + return Objects.hash(terms, language, caseSensitive, diacriticSensitive); + } } diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/query/TextCriteriaUnitTests.java b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/query/TextCriteriaUnitTests.java index ab2b4d9e4e..397097abf1 100644 --- a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/query/TextCriteriaUnitTests.java +++ b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/query/TextCriteriaUnitTests.java @@ -103,6 +103,13 @@ public void diacriticSensitiveOperatorShouldBeSetCorrectly() { .isEqualTo(new Document("$search", "coffee").append("$diacriticSensitive", true)); } + @Test // DATAMONGO-2504 + public void twoIdenticalCriteriaShouldBeEqual() { + TextCriteria criteriaOne = TextCriteria.forDefaultLanguage().matching("coffee"); + TextCriteria criteriaTwo = TextCriteria.forDefaultLanguage().matching("coffee"); + assertThat(criteriaOne).isEqualTo(criteriaTwo); + } + private Document searchObject(String json) { return new Document("$text", Document.parse(json)); }