diff --git a/spring-data-commons-core/src/main/java/org/springframework/data/mapping/model/AbstractPersistentProperty.java b/spring-data-commons-core/src/main/java/org/springframework/data/mapping/model/AbstractPersistentProperty.java index da3d91c6c..fea40007f 100644 --- a/spring-data-commons-core/src/main/java/org/springframework/data/mapping/model/AbstractPersistentProperty.java +++ b/spring-data-commons-core/src/main/java/org/springframework/data/mapping/model/AbstractPersistentProperty.java @@ -202,4 +202,32 @@ public abstract class AbstractPersistentProperty
public Class> getMapValueType() {
return isMap() ? information.getMapValueType().getType() : null;
}
+
+ /*
+ * (non-Javadoc)
+ * @see java.lang.Object#equals(java.lang.Object)
+ */
+ @Override
+ public boolean equals(Object obj) {
+
+ if (this == obj) {
+ return true;
+ }
+
+ if (!(obj instanceof AbstractPersistentProperty)) {
+ return false;
+ }
+
+ AbstractPersistentProperty> that = (AbstractPersistentProperty>) obj;
+ return this.field.equals(that.field);
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see java.lang.Object#hashCode()
+ */
+ @Override
+ public int hashCode() {
+ return this.field.hashCode();
+ }
}
diff --git a/spring-data-commons-core/src/test/java/org/springframework/data/mapping/model/AbstractPersistentPropertyUnitTests.java b/spring-data-commons-core/src/test/java/org/springframework/data/mapping/model/AbstractPersistentPropertyUnitTests.java
index 0fc1956f7..bd839efd5 100644
--- a/spring-data-commons-core/src/test/java/org/springframework/data/mapping/model/AbstractPersistentPropertyUnitTests.java
+++ b/spring-data-commons-core/src/test/java/org/springframework/data/mapping/model/AbstractPersistentPropertyUnitTests.java
@@ -78,6 +78,34 @@ public class AbstractPersistentPropertyUnitTests {
assertThat(property.isEntity(), is(false));
}
+ /**
+ * @see DATACMNS-121
+ */
+ @Test
+ public void considersPropertiesEqualIfFieldEquals() {
+
+ Field first = ReflectionUtils.findField(FirstConcrete.class, "genericField");
+ Field second = ReflectionUtils.findField(SecondConcrete.class, "genericField");
+
+ SamplePersistentProperty firstProperty = new SamplePersistentProperty(first, null, entity, typeHolder);
+ SamplePersistentProperty secondProperty = new SamplePersistentProperty(second, null, entity, typeHolder);
+
+ assertThat(firstProperty, is(secondProperty));
+ assertThat(firstProperty.hashCode(), is(secondProperty.hashCode()));
+ }
+
+ class Generic