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 { + T genericField; + } + + class FirstConcrete extends Generic { + + } + + class SecondConcrete extends Generic { + + } + @SuppressWarnings("serial") class TestClassSet extends TreeSet { }