diff --git a/src/main/java/org/springframework/data/mapping/PersistentProperty.java b/src/main/java/org/springframework/data/mapping/PersistentProperty.java index 244629338..e8c52f0c1 100644 --- a/src/main/java/org/springframework/data/mapping/PersistentProperty.java +++ b/src/main/java/org/springframework/data/mapping/PersistentProperty.java @@ -97,7 +97,7 @@ public interface PersistentProperty

> { Method getter = getGetter(); if (getter == null) { - throw new IllegalArgumentException("No getter available for this persistent property!"); + throw new IllegalArgumentException(String.format("No getter available for persistent property %s!", this)); } return getter; @@ -117,7 +117,7 @@ public interface PersistentProperty

> { Method setter = getSetter(); if (setter == null) { - throw new IllegalArgumentException("No setter available for this persistent property!"); + throw new IllegalArgumentException(String.format("No setter available for persistent property %s!", this)); } return setter; @@ -131,7 +131,7 @@ public interface PersistentProperty

> { Field field = getField(); if (field == null) { - throw new IllegalArgumentException("No field backing this persistent property!"); + throw new IllegalArgumentException(String.format("No field backing persistent property %s!", this)); } return field; diff --git a/src/main/java/org/springframework/data/mapping/model/Property.java b/src/main/java/org/springframework/data/mapping/model/Property.java index f8f7f6b74..f94e16f83 100644 --- a/src/main/java/org/springframework/data/mapping/model/Property.java +++ b/src/main/java/org/springframework/data/mapping/model/Property.java @@ -64,7 +64,8 @@ public class Property { ); this.hashCode = Lazy.of(() -> withFieldOrDescriptor(Object::hashCode)); this.name = Lazy.of(() -> withFieldOrDescriptor(Field::getName, FeatureDescriptor::getName)); - this.toString = Lazy.of(() -> withFieldOrDescriptor(Object::toString)); + this.toString = Lazy.of(() -> withFieldOrDescriptor(Object::toString, + it -> String.format("%s.%s", type.getType().getName(), it.getDisplayName()))); this.getter = descriptor.map(PropertyDescriptor::getReadMethod)// .filter(it -> getType() != null)// diff --git a/src/test/java/org/springframework/data/mapping/model/AnnotationBasedPersistentPropertyUnitTests.java b/src/test/java/org/springframework/data/mapping/model/AnnotationBasedPersistentPropertyUnitTests.java index ae3100f4e..5ac8d1313 100755 --- a/src/test/java/org/springframework/data/mapping/model/AnnotationBasedPersistentPropertyUnitTests.java +++ b/src/test/java/org/springframework/data/mapping/model/AnnotationBasedPersistentPropertyUnitTests.java @@ -239,6 +239,39 @@ public class AnnotationBasedPersistentPropertyUnitTests

property.getRequiredAnnotation(Transient.class)).isInstanceOf(IllegalStateException.class); } + @Test // DATACMNS-1359 + public void missingRequiredGetterThrowsException() { + + SamplePersistentProperty property = getProperty(Sample.class, "field"); + + assertThatExceptionOfType(IllegalArgumentException.class) // + .isThrownBy(() -> property.getRequiredGetter()) // + .withMessageContaining("field") // + .withMessageContaining(Sample.class.getName()); + } + + @Test // DATACMNS-1359 + public void missingRequiredSetterThrowsException() { + + SamplePersistentProperty property = getProperty(Sample.class, "field"); + + assertThatExceptionOfType(IllegalArgumentException.class) // + .isThrownBy(() -> property.getRequiredSetter()) // + .withMessageContaining("field") // + .withMessageContaining(Sample.class.getName()); + } + + @Test + public void missingRequiredFieldThrowsException() { + + SamplePersistentProperty property = getProperty(NoField.class, "firstname"); + + assertThatExceptionOfType(IllegalArgumentException.class) // + .isThrownBy(() -> property.getRequiredField()) // + .withMessageContaining("firstname") // + .withMessageContaining(NoField.class.getName()); + } + @SuppressWarnings("unchecked") private Map, Annotation> getAnnotationCache(SamplePersistentProperty property) { return (Map, Annotation>) ReflectionTestUtils.getField(property, "annotationCache"); @@ -410,4 +443,9 @@ public class AnnotationBasedPersistentPropertyUnitTests