From 1e58f137657bb971ff6e98faa45a0a66fe5b5096 Mon Sep 17 00:00:00 2001 From: Jens Schauder Date: Fri, 7 Jul 2017 13:48:27 +0200 Subject: [PATCH 1/2] DATAJDBC-115 - Prepare branch --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index ba6948c95d..20880d90ca 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ org.springframework.data spring-data-jdbc - 1.0.0.BUILD-SNAPSHOT + 1.0.0.DATAJDBC-115-SNAPSHOT Spring Data JDBC Spring Data module for JDBC repositories. From c953e0f5fe42aa97a21660352ceb31f9c433ee20 Mon Sep 17 00:00:00 2001 From: Jens Schauder Date: Fri, 7 Jul 2017 13:49:58 +0200 Subject: [PATCH 2/2] DATAJDBC-115 - Adapt to changes in SD Commons API. --- .../data/jdbc/repository/EntityRowMapper.java | 12 +++++----- .../jdbc/repository/SimpleJdbcRepository.java | 22 +++++++++---------- .../BasicJdbcPersistentEntityInformation.java | 2 +- .../JdbcPersistentEntityInformation.java | 8 +++---- .../support/JdbcRepositoryFactory.java | 15 +++++++------ .../EventPublishingEntityRowMapperTest.java | 2 +- 6 files changed, 31 insertions(+), 30 deletions(-) diff --git a/src/main/java/org/springframework/data/jdbc/repository/EntityRowMapper.java b/src/main/java/org/springframework/data/jdbc/repository/EntityRowMapper.java index b529d9187a..4288685ebd 100644 --- a/src/main/java/org/springframework/data/jdbc/repository/EntityRowMapper.java +++ b/src/main/java/org/springframework/data/jdbc/repository/EntityRowMapper.java @@ -27,12 +27,12 @@ import org.springframework.data.convert.EntityInstantiator; import org.springframework.data.jdbc.mapping.model.JdbcPersistentEntity; import org.springframework.data.jdbc.mapping.model.JdbcPersistentProperty; +import org.springframework.data.mapping.MappingException; import org.springframework.data.mapping.PersistentProperty; import org.springframework.data.mapping.PersistentPropertyAccessor; import org.springframework.data.mapping.PreferredConstructor.Parameter; import org.springframework.data.mapping.PropertyHandler; import org.springframework.data.mapping.model.ConvertingPropertyAccessor; -import org.springframework.data.mapping.model.MappingException; import org.springframework.data.mapping.model.ParameterValueProvider; import org.springframework.jdbc.core.RowMapper; @@ -74,10 +74,10 @@ private T createInstance(ResultSet rs) { return instantiator.createInstance(entity, ResultSetParameterValueProvider.of(rs, conversions)); } - private static Optional readFrom(ResultSet resultSet, PersistentProperty property) { + private static Object readFrom(ResultSet resultSet, PersistentProperty property) { try { - return Optional.ofNullable(resultSet.getObject(property.getName())); + return resultSet.getObject(property.getName()); } catch (SQLException o_O) { throw new MappingException(String.format("Could not read property %s from result set!", property), o_O); } @@ -94,16 +94,16 @@ private static class ResultSetParameterValueProvider implements ParameterValuePr * @see org.springframework.data.mapping.model.ParameterValueProvider#getParameterValue(org.springframework.data.mapping.PreferredConstructor.Parameter) */ @Override - public Optional getParameterValue(Parameter parameter) { + public T getParameterValue(Parameter parameter) { - return parameter.getName().map(name -> { + String name = parameter.getName(); + if (name == null ) return null; try { return conversionService.convert(resultSet.getObject(name), parameter.getType().getType()); } catch (SQLException o_O) { throw new MappingException(String.format("Couldn't read column %s from ResultSet.", name), o_O); } - }); } } } diff --git a/src/main/java/org/springframework/data/jdbc/repository/SimpleJdbcRepository.java b/src/main/java/org/springframework/data/jdbc/repository/SimpleJdbcRepository.java index db0e9cf4bf..9fbd972117 100644 --- a/src/main/java/org/springframework/data/jdbc/repository/SimpleJdbcRepository.java +++ b/src/main/java/org/springframework/data/jdbc/repository/SimpleJdbcRepository.java @@ -210,8 +210,8 @@ private Map getPropertyMap(final S instance) { this.persistentEntity.doWithProperties((PropertyHandler) property -> { - Optional value = persistentEntity.getPropertyAccessor(instance).getProperty(property); - parameters.put(property.getColumnName(), value.orElse(null)); + Object value = persistentEntity.getPropertyAccessor(instance).getProperty(property); + parameters.put(property.getColumnName(), value); }); return parameters; @@ -238,17 +238,17 @@ private void doInsert(S instance) { private ID getIdValueOrNull(S instance) { - Optional idValue = entityInformation.getId(instance); - return isIdPropertySimpleTypeAndValueZero(idValue) ? null : idValue.get(); + ID idValue = entityInformation.getId(instance); + return isIdPropertySimpleTypeAndValueZero(idValue) ? null : idValue; } - private boolean isIdPropertySimpleTypeAndValueZero(Optional idValue) { + private boolean isIdPropertySimpleTypeAndValueZero(ID idValue) { - Optional idProperty = persistentEntity.getIdProperty(); - return !idValue.isPresent() // - || !idProperty.isPresent() // - || (((Optional) idProperty).get().getType() == int.class && idValue.equals(0)) // - || (((Optional) idProperty).get().getType() == long.class && idValue.equals(0L)); + JdbcPersistentProperty idProperty = persistentEntity.getIdProperty(); + return idValue == null // + || idProperty == null // + || (idProperty.getType() == int.class && idValue.equals(0)) // + || (idProperty.getType() == long.class && idValue.equals(0L)); } private void setIdFromJdbc(S instance, KeyHolder holder) { @@ -259,7 +259,7 @@ private void setIdFromJdbc(S instance, KeyHolder holder) { Class targetType = persistentEntity.getRequiredIdProperty().getType(); Object converted = convert(it, targetType); - entityInformation.setId(instance, Optional.of(converted)); + entityInformation.setId(instance, converted); }); } catch (NonTransientDataAccessException e) { diff --git a/src/main/java/org/springframework/data/jdbc/repository/support/BasicJdbcPersistentEntityInformation.java b/src/main/java/org/springframework/data/jdbc/repository/support/BasicJdbcPersistentEntityInformation.java index 6e994c3315..9d3e4ab361 100644 --- a/src/main/java/org/springframework/data/jdbc/repository/support/BasicJdbcPersistentEntityInformation.java +++ b/src/main/java/org/springframework/data/jdbc/repository/support/BasicJdbcPersistentEntityInformation.java @@ -42,7 +42,7 @@ public BasicJdbcPersistentEntityInformation(JdbcPersistentEntity persistentEn * @see org.springframework.data.jdbc.repository.support.JdbcPersistentEntityInformation#setId(java.lang.Object, java.util.Optional) */ @Override - public void setId(T instance, Optional value) { + public void setId(T instance, Object value) { persistentEntity.getPropertyAccessor(instance).setProperty(persistentEntity.getRequiredIdProperty(), value); } } diff --git a/src/main/java/org/springframework/data/jdbc/repository/support/JdbcPersistentEntityInformation.java b/src/main/java/org/springframework/data/jdbc/repository/support/JdbcPersistentEntityInformation.java index b1936fa152..9b9e65000d 100644 --- a/src/main/java/org/springframework/data/jdbc/repository/support/JdbcPersistentEntityInformation.java +++ b/src/main/java/org/springframework/data/jdbc/repository/support/JdbcPersistentEntityInformation.java @@ -15,7 +15,6 @@ */ package org.springframework.data.jdbc.repository.support; -import java.io.Serializable; import java.util.Optional; import org.springframework.data.repository.core.EntityInformation; @@ -26,7 +25,7 @@ */ public interface JdbcPersistentEntityInformation extends EntityInformation { - void setId(T instance, Optional value); + void setId(T instance, Object value); /** * Returns the identifier of the given entity or throws and exception if it can't be obtained. @@ -36,7 +35,8 @@ public interface JdbcPersistentEntityInformation extends EntityInformatio * @throws IllegalArgumentException in case no identifier can be obtained for the given entity. */ default ID getRequiredId(T entity) { - return getId(entity).orElseThrow(() -> new IllegalArgumentException( - String.format("Could not obtain required identifier from entity %s!", entity))); + ID id = getId(entity); + if (id == null) throw new IllegalStateException(String.format("Could not obtain required identifier from entity %s!", entity)); + return id; } } diff --git a/src/main/java/org/springframework/data/jdbc/repository/support/JdbcRepositoryFactory.java b/src/main/java/org/springframework/data/jdbc/repository/support/JdbcRepositoryFactory.java index be2160d067..35299aaa3a 100644 --- a/src/main/java/org/springframework/data/jdbc/repository/support/JdbcRepositoryFactory.java +++ b/src/main/java/org/springframework/data/jdbc/repository/support/JdbcRepositoryFactory.java @@ -17,11 +17,10 @@ import lombok.RequiredArgsConstructor; -import java.io.Serializable; - import org.springframework.context.ApplicationEventPublisher; import org.springframework.data.jdbc.mapping.context.JdbcMappingContext; import org.springframework.data.jdbc.mapping.model.JdbcPersistentEntity; +import org.springframework.data.jdbc.mapping.model.JdbcPersistentEntityImpl; import org.springframework.data.jdbc.repository.SimpleJdbcRepository; import org.springframework.data.repository.core.EntityInformation; import org.springframework.data.repository.core.RepositoryInformation; @@ -44,16 +43,18 @@ public class JdbcRepositoryFactory extends RepositoryFactorySupport { @Override public EntityInformation getEntityInformation(Class aClass) { - return context.getPersistentEntity(aClass) - .map(e -> new BasicJdbcPersistentEntityInformation((JdbcPersistentEntity) e)).orElseGet(null); + JdbcPersistentEntityImpl persistentEntity = context.getPersistentEntity(aClass); + if (persistentEntity == null) + return null; + return new BasicJdbcPersistentEntityInformation((JdbcPersistentEntity) persistentEntity); } @Override protected Object getTargetRepository(RepositoryInformation repositoryInformation) { - JdbcPersistentEntity persistentEntity = context // - .getPersistentEntity(repositoryInformation.getDomainType()) // - .orElseThrow(() -> new IllegalArgumentException("%s does not represent a persistent entity")); // + JdbcPersistentEntity persistentEntity = context + .getRequiredPersistentEntity(repositoryInformation.getDomainType()); + return new SimpleJdbcRepository<>(persistentEntity, jdbcOperations, publisher); } diff --git a/src/test/java/org/springframework/data/jdbc/repository/EventPublishingEntityRowMapperTest.java b/src/test/java/org/springframework/data/jdbc/repository/EventPublishingEntityRowMapperTest.java index fe6f94bad7..d89cb3eddb 100644 --- a/src/test/java/org/springframework/data/jdbc/repository/EventPublishingEntityRowMapperTest.java +++ b/src/test/java/org/springframework/data/jdbc/repository/EventPublishingEntityRowMapperTest.java @@ -51,7 +51,7 @@ public class EventPublishingEntityRowMapperTest { public void eventGetsPublishedAfterInstantiation() throws SQLException { when(rowMapperDelegate.mapRow(any(ResultSet.class), anyInt())).thenReturn(new DummyEntity(1L)); - when(entityInformation.getId(any())).thenReturn(Optional.of(1L)); + when(entityInformation.getId(any())).thenReturn(1L); EventPublishingEntityRowMapper rowMapper = new EventPublishingEntityRowMapper<>(rowMapperDelegate, entityInformation, publisher);