diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/query/Criteria.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/query/Criteria.java index df4dd6556..dd843e898 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/query/Criteria.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/query/Criteria.java @@ -772,8 +772,17 @@ public class Criteria implements CriteriaDefinition { return right == null; } - if (left instanceof Pattern) { - return right instanceof Pattern ? ((Pattern) left).pattern().equals(((Pattern) right).pattern()) : false; + if (Pattern.class.isInstance(left)) { + + if (!Pattern.class.isInstance(right)) { + return false; + } + + Pattern leftPattern = (Pattern) left; + Pattern rightPattern = (Pattern) right; + + return leftPattern.pattern().equals(rightPattern.pattern()) // + && leftPattern.flags() == rightPattern.flags(); } return ObjectUtils.nullSafeEquals(left, right); diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/query/CriteriaTests.java b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/query/CriteriaTests.java index 06bb9b2ff..e91837bb1 100644 --- a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/query/CriteriaTests.java +++ b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/query/CriteriaTests.java @@ -216,4 +216,13 @@ public class CriteriaTests { assertThat(dbo, isBsonObject().containing("foo.$geoIntersects.$geometry", lineString)); } + + @Test // DATAMONGO-2002 + public void shouldEqualForSamePattern() { + + Criteria left = new Criteria("field").regex("foo", "iu"); + Criteria right = new Criteria("field").regex("foo"); + + assertThat(left, is(not(right))); + } }