From aa12db22c0d08cad370ef46cd3231369ceaecea8 Mon Sep 17 00:00:00 2001 From: Oliver Gierke Date: Wed, 11 Apr 2012 21:00:03 +0200 Subject: [PATCH] =?UTF-8?q?DATACMNS-121=20-=20Implement=20equals(=E2=80=A6?= =?UTF-8?q?)=20and=20hashCode()=20of=20AbstractPersistentProperty.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Implemented equals(…) and hashCode() methods based on the field backing the property. --- .../model/AbstractPersistentProperty.java | 28 +++++++++++++++++++ .../AbstractPersistentPropertyUnitTests.java | 28 +++++++++++++++++++ 2 files changed, 56 insertions(+) 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 { }