diff --git a/pom.xml b/pom.xml index 44b1e51deb..4eb0f3e45d 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ org.springframework.data spring-data-commons - 1.10.0.BUILD-SNAPSHOT + 1.10.0.DATACMNS-583-SNAPSHOT Spring Data Core diff --git a/src/main/java/org/springframework/data/repository/support/DomainClassConverter.java b/src/main/java/org/springframework/data/repository/support/DomainClassConverter.java index b2ce5242cd..948b332e5c 100644 --- a/src/main/java/org/springframework/data/repository/support/DomainClassConverter.java +++ b/src/main/java/org/springframework/data/repository/support/DomainClassConverter.java @@ -1,5 +1,5 @@ /* - * Copyright 2008-2012 the original author or authors. + * Copyright 2008-2014 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -31,11 +31,12 @@ /** * {@link org.springframework.core.convert.converter.Converter} to convert arbitrary input into domain classes managed - * by Spring Data {@link CrudRepository} s. The implementation uses a {@link ConversionService} in turn to convert the + * by Spring Data {@link CrudRepository}s. The implementation uses a {@link ConversionService} in turn to convert the * source type into the domain class' id type which is then converted into a domain class object by using a * {@link CrudRepository}. * * @author Oliver Gierke + * @author Thomas Darimont */ public class DomainClassConverter implements ConditionalGenericConverter, ApplicationContextAware { @@ -65,6 +66,10 @@ public Object convert(Object source, TypeDescriptor sourceType, TypeDescriptor t return null; } + if(sourceType.equals(targetType)) { + return source; + } + Class domainType = targetType.getType(); RepositoryInformation info = repositories.getRepositoryInformationFor(domainType); @@ -82,6 +87,10 @@ public boolean matches(TypeDescriptor sourceType, TypeDescriptor targetType) { if (!repositories.hasRepositoryFor(targetType.getType())) { return false; } + + if(sourceType.equals(targetType)) { + return true; + } return conversionService.canConvert(sourceType.getType(), repositories.getRepositoryInformationFor(targetType.getType()).getIdType()); diff --git a/src/test/java/org/springframework/data/repository/support/DomainClassConverterUnitTests.java b/src/test/java/org/springframework/data/repository/support/DomainClassConverterUnitTests.java index f78778d642..d809c24924 100644 --- a/src/test/java/org/springframework/data/repository/support/DomainClassConverterUnitTests.java +++ b/src/test/java/org/springframework/data/repository/support/DomainClassConverterUnitTests.java @@ -39,6 +39,7 @@ * Unit test for {@link DomainClassConverter}. * * @author Oliver Gierke + * @author Thomas Darimont */ @RunWith(MockitoJUnitRunner.class) public class DomainClassConverterUnitTests { @@ -143,6 +144,19 @@ public void discoversFactoryAndRepoFromParentApplicationContext() { assertThat(converter.matches(sourceDescriptor, targetDescriptor), is(true)); } + /** + * @DATACMNS-583 + */ + @Test + public void shouldReturnSourceObjectIfSourceAndTargetTypesAreTheSame() { + + ApplicationContext context = initContextWithRepo(); + converter.setApplicationContext(context); + + assertThat(converter.matches(targetDescriptor, targetDescriptor), is(true)); + assertThat((User) converter.convert(USER, targetDescriptor, targetDescriptor), is(USER)); + } + private ApplicationContext initContextWithRepo() { BeanDefinitionBuilder builder = BeanDefinitionBuilder.rootBeanDefinition(DummyRepositoryFactoryBean.class);