From 4c179a93eca22f2c7c1c176a76489212a528c188 Mon Sep 17 00:00:00 2001 From: Jens Schauder Date: Fri, 27 Jul 2018 14:29:44 +0200 Subject: [PATCH] DATAJDBC-229 - Added UUID.class as simple type. Also made RelationalMappingContext actually use the JdbcSimpleTypes. In order for this to work the database needs to be able to handle parameters of type UUID and store them either as such or internally convert them. Currently no conversion by Spring Data JDBC happens. Original pull request: #76. --- .../jdbc/core/mapping/JdbcSimpleTypes.java | 1 + .../mapping/RelationalMappingContext.java | 16 ++++------ ...RelationalPersistentPropertyUnitTests.java | 32 +++++++++++++++---- .../RelationalMappingContextUnitTests.java | 1 + 4 files changed, 34 insertions(+), 16 deletions(-) diff --git a/src/main/java/org/springframework/data/jdbc/core/mapping/JdbcSimpleTypes.java b/src/main/java/org/springframework/data/jdbc/core/mapping/JdbcSimpleTypes.java index 7c0d7386..62a43069 100644 --- a/src/main/java/org/springframework/data/jdbc/core/mapping/JdbcSimpleTypes.java +++ b/src/main/java/org/springframework/data/jdbc/core/mapping/JdbcSimpleTypes.java @@ -66,6 +66,7 @@ public abstract class JdbcSimpleTypes { simpleTypes.add(Struct.class); simpleTypes.add(Time.class); simpleTypes.add(Timestamp.class); + simpleTypes.add(UUID.class); JDBC_SIMPLE_TYPES = Collections.unmodifiableSet(simpleTypes); } diff --git a/src/main/java/org/springframework/data/relational/core/mapping/RelationalMappingContext.java b/src/main/java/org/springframework/data/relational/core/mapping/RelationalMappingContext.java index e45cadba..bcafc1ce 100644 --- a/src/main/java/org/springframework/data/relational/core/mapping/RelationalMappingContext.java +++ b/src/main/java/org/springframework/data/relational/core/mapping/RelationalMappingContext.java @@ -17,17 +17,12 @@ package org.springframework.data.relational.core.mapping; import lombok.Getter; -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; - -import org.springframework.data.mapping.PropertyPath; +import org.springframework.data.jdbc.core.mapping.JdbcSimpleTypes; import org.springframework.data.mapping.context.AbstractMappingContext; import org.springframework.data.mapping.context.MappingContext; import org.springframework.data.mapping.model.Property; import org.springframework.data.mapping.model.SimpleTypeHolder; import org.springframework.data.util.TypeInformation; -import org.springframework.lang.Nullable; import org.springframework.util.Assert; /** @@ -39,7 +34,8 @@ import org.springframework.util.Assert; * @author Oliver Gierke * @author Mark Paluch */ -public class RelationalMappingContext extends AbstractMappingContext, RelationalPersistentProperty> { +public class RelationalMappingContext + extends AbstractMappingContext, RelationalPersistentProperty> { @Getter private final NamingStrategy namingStrategy; @@ -61,7 +57,7 @@ public class RelationalMappingContext extends AbstractMappingContext owner, - SimpleTypeHolder simpleTypeHolder) { + protected RelationalPersistentProperty createPersistentProperty(Property property, + RelationalPersistentEntity owner, SimpleTypeHolder simpleTypeHolder) { return new BasicRelationalPersistentProperty(property, owner, simpleTypeHolder, this); } } diff --git a/src/test/java/org/springframework/data/relational/core/mapping/BasicRelationalPersistentPropertyUnitTests.java b/src/test/java/org/springframework/data/relational/core/mapping/BasicRelationalPersistentPropertyUnitTests.java index 794f4856..eb3cb1a8 100644 --- a/src/test/java/org/springframework/data/relational/core/mapping/BasicRelationalPersistentPropertyUnitTests.java +++ b/src/test/java/org/springframework/data/relational/core/mapping/BasicRelationalPersistentPropertyUnitTests.java @@ -22,14 +22,11 @@ import lombok.Data; import java.time.LocalDateTime; import java.time.ZonedDateTime; import java.util.Date; +import java.util.UUID; +import org.assertj.core.api.SoftAssertions; import org.junit.Test; import org.springframework.data.mapping.PropertyHandler; -import org.springframework.data.relational.core.mapping.BasicRelationalPersistentProperty; -import org.springframework.data.relational.core.mapping.Column; -import org.springframework.data.relational.core.mapping.RelationalMappingContext; -import org.springframework.data.relational.core.mapping.RelationalPersistentEntity; -import org.springframework.data.relational.core.mapping.RelationalPersistentProperty; /** * Unit tests for the {@link BasicRelationalPersistentProperty}. @@ -62,6 +59,21 @@ public class BasicRelationalPersistentPropertyUnitTests { }); } + @Test // DATAJDBC-104, DATAJDBC-1384 + public void testTargetTypesForPropertyType() { + + SoftAssertions softly = new SoftAssertions(); + + RelationalPersistentEntity persistentEntity = context.getRequiredPersistentEntity(DummyEntity.class); + + checkTargetType(softly, persistentEntity, "someEnum", String.class); + checkTargetType(softly, persistentEntity, "localDateTime", Date.class); + checkTargetType(softly, persistentEntity, "zonedDateTime", String.class); + checkTargetType(softly, persistentEntity, "uuid", UUID.class); + + softly.assertAll(); + } + @Test // DATAJDBC-106 public void detectsAnnotatedColumnName() { @@ -72,15 +84,23 @@ public class BasicRelationalPersistentPropertyUnitTests { .isEqualTo("dummy_last_updated_at"); } + private void checkTargetType(SoftAssertions softly, RelationalPersistentEntity persistentEntity, + String propertyName, Class expected) { + + RelationalPersistentProperty property = persistentEntity.getRequiredPersistentProperty(propertyName); + + softly.assertThat(property.getColumnType()).describedAs(propertyName).isEqualTo(expected); + } + @Data private static class DummyEntity { private final SomeEnum someEnum; private final LocalDateTime localDateTime; private final ZonedDateTime zonedDateTime; + private final UUID uuid; // DATACMNS-106 - private @Column("dummy_name") String name; @Column("dummy_last_updated_at") diff --git a/src/test/java/org/springframework/data/relational/core/mapping/RelationalMappingContextUnitTests.java b/src/test/java/org/springframework/data/relational/core/mapping/RelationalMappingContextUnitTests.java index 5f1ea345..4c30bfd1 100644 --- a/src/test/java/org/springframework/data/relational/core/mapping/RelationalMappingContextUnitTests.java +++ b/src/test/java/org/springframework/data/relational/core/mapping/RelationalMappingContextUnitTests.java @@ -35,6 +35,7 @@ public class RelationalMappingContextUnitTests { RelationalMappingContext mappingContext = new RelationalMappingContext(); RelationalPersistentEntity entity = mappingContext.getPersistentEntity(EntityWithUuid.class); RelationalPersistentProperty uuidProperty = entity.getRequiredPersistentProperty("uuid"); + assertThat(uuidProperty.isEntity()).isFalse(); }