From ecb12f70a29259ddafcd591bddd870178d87dbad Mon Sep 17 00:00:00 2001 From: Oliver Gierke Date: Sat, 12 Mar 2011 12:18:13 +0100 Subject: [PATCH] Moved special id-property handling into PersistentProperty interface. The PersistentProperty interface now has a isIdPropertyMethod(). Subclasses might alter it to support further id property detection mechanisms. Added missing import in BasicPersistentProperty. --- .../mapping/BasicMappingConfigurationBuilder.java | 14 -------------- .../data/mapping/BasicMappingContext.java | 6 ++++-- .../data/mapping/BasicPersistentProperty.java | 6 ++++++ .../mapping/model/MappingConfigurationBuilder.java | 2 -- .../data/mapping/model/PersistentProperty.java | 1 + 5 files changed, 11 insertions(+), 18 deletions(-) diff --git a/spring-data-commons-core/src/main/java/org/springframework/data/mapping/BasicMappingConfigurationBuilder.java b/spring-data-commons-core/src/main/java/org/springframework/data/mapping/BasicMappingConfigurationBuilder.java index dcf8c057e..ff47e6add 100644 --- a/spring-data-commons-core/src/main/java/org/springframework/data/mapping/BasicMappingConfigurationBuilder.java +++ b/spring-data-commons-core/src/main/java/org/springframework/data/mapping/BasicMappingConfigurationBuilder.java @@ -80,16 +80,6 @@ public class BasicMappingConfigurationBuilder implements MappingConfigurationBui return new BasicPersistentProperty(field.getName(), field.getType(), field, descriptor); } - @Override - public PersistentProperty getIdProperty(Class type) throws MappingConfigurationException { - for (Field field : type.getDeclaredFields()) { - if (isIdField(field)) { - return createPersistentProperty(field, null); - } - } - return null; - } - @SuppressWarnings({"unchecked"}) @Override public PreferredConstructor getPreferredConstructor(Class type) throws MappingConfigurationException { @@ -189,8 +179,4 @@ public class BasicMappingConfigurationBuilder implements MappingConfigurationBui } return false; } - - protected boolean isIdField(Field field) { - return field.isAnnotationPresent(Id.class); - } } diff --git a/spring-data-commons-core/src/main/java/org/springframework/data/mapping/BasicMappingContext.java b/spring-data-commons-core/src/main/java/org/springframework/data/mapping/BasicMappingContext.java index 0cc3c9569..945c0e190 100644 --- a/spring-data-commons-core/src/main/java/org/springframework/data/mapping/BasicMappingContext.java +++ b/spring-data-commons-core/src/main/java/org/springframework/data/mapping/BasicMappingContext.java @@ -108,6 +108,10 @@ public class BasicMappingContext implements MappingContext, InitializingBean { Association association = builder.createAssociation(property); entity.addAssociation(association); } + + if (property.isIdProperty()) { + entity.setIdProperty(property); + } } } catch (MappingConfigurationException e) { log.error(e.getMessage(), e); @@ -115,8 +119,6 @@ public class BasicMappingContext implements MappingContext, InitializingBean { } }); - - entity.setIdProperty(builder.getIdProperty(type)); entity.setPreferredConstructor(builder.getPreferredConstructor(type)); // Inform listeners diff --git a/spring-data-commons-core/src/main/java/org/springframework/data/mapping/BasicPersistentProperty.java b/spring-data-commons-core/src/main/java/org/springframework/data/mapping/BasicPersistentProperty.java index 3f1d97934..cc876889d 100644 --- a/spring-data-commons-core/src/main/java/org/springframework/data/mapping/BasicPersistentProperty.java +++ b/spring-data-commons-core/src/main/java/org/springframework/data/mapping/BasicPersistentProperty.java @@ -18,6 +18,7 @@ package org.springframework.data.mapping; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; +import org.springframework.data.annotation.Id; import org.springframework.data.annotation.Transient; import org.springframework.data.mapping.model.Association; import org.springframework.data.mapping.model.PersistentEntity; @@ -146,4 +147,9 @@ public class BasicPersistentProperty implements PersistentProperty { } return type.getComponentType(); } + + @Override + public boolean isIdProperty() { + return field.isAnnotationPresent(Id.class); + } } diff --git a/spring-data-commons-core/src/main/java/org/springframework/data/mapping/model/MappingConfigurationBuilder.java b/spring-data-commons-core/src/main/java/org/springframework/data/mapping/model/MappingConfigurationBuilder.java index 23f79acd9..5cd137f83 100644 --- a/spring-data-commons-core/src/main/java/org/springframework/data/mapping/model/MappingConfigurationBuilder.java +++ b/spring-data-commons-core/src/main/java/org/springframework/data/mapping/model/MappingConfigurationBuilder.java @@ -32,8 +32,6 @@ public interface MappingConfigurationBuilder { PersistentProperty createPersistentProperty(Field field, PropertyDescriptor descriptor) throws MappingConfigurationException; - PersistentProperty getIdProperty(Class clazz) throws MappingConfigurationException; - PreferredConstructor getPreferredConstructor(Class clazz) throws MappingConfigurationException; boolean isAssociation(Field field, PropertyDescriptor descriptor) throws MappingConfigurationException; diff --git a/spring-data-commons-core/src/main/java/org/springframework/data/mapping/model/PersistentProperty.java b/spring-data-commons-core/src/main/java/org/springframework/data/mapping/model/PersistentProperty.java index 500f33a31..234422d1a 100644 --- a/spring-data-commons-core/src/main/java/org/springframework/data/mapping/model/PersistentProperty.java +++ b/spring-data-commons-core/src/main/java/org/springframework/data/mapping/model/PersistentProperty.java @@ -49,4 +49,5 @@ public interface PersistentProperty { Class getComponentType(); + boolean isIdProperty(); }