DATAJDBC-158 - BasicJdbcPersistentEntityInformation honors Persistable implementations.

This commit is contained in:
Jens Schauder
2017-12-04 11:45:49 +01:00
committed by Greg Turnquist
parent 08691d6c45
commit ae4e2a7deb
4 changed files with 109 additions and 11 deletions

View File

@@ -24,11 +24,7 @@ import java.util.stream.StreamSupport;
import org.springframework.dao.EmptyResultDataAccessException;
import org.springframework.dao.InvalidDataAccessApiUsageException;
import org.springframework.dao.NonTransientDataAccessException;
import org.springframework.data.jdbc.mapping.model.BasicJdbcPersistentEntityInformation;
import org.springframework.data.jdbc.mapping.model.JdbcMappingContext;
import org.springframework.data.jdbc.mapping.model.JdbcPersistentEntity;
import org.springframework.data.jdbc.mapping.model.JdbcPersistentEntityInformation;
import org.springframework.data.jdbc.mapping.model.JdbcPersistentProperty;
import org.springframework.data.jdbc.mapping.model.*;
import org.springframework.data.jdbc.support.JdbcUtil;
import org.springframework.data.mapping.PropertyHandler;
import org.springframework.data.mapping.PropertyPath;
@@ -233,9 +229,10 @@ public class DefaultDataAccessStrategy implements DataAccessStrategy {
return parameters;
}
@SuppressWarnings("unchecked")
private <S, ID> ID getIdValueOrNull(S instance, JdbcPersistentEntity<S> persistentEntity) {
EntityInformation<S, ID> entityInformation = new BasicJdbcPersistentEntityInformation<>(persistentEntity);
EntityInformation<S, ID> entityInformation = (EntityInformation<S, ID>) context.getRequiredPersistentEntityInformation(persistentEntity.getType());
ID idValue = entityInformation.getId(instance);

View File

@@ -15,7 +15,9 @@
*/
package org.springframework.data.jdbc.mapping.model;
import org.springframework.data.domain.Persistable;
import org.springframework.data.repository.core.support.PersistentEntityInformation;
import org.springframework.lang.Nullable;
/**
* @author Jens Schauder
@@ -33,6 +35,18 @@ public class BasicJdbcPersistentEntityInformation<T, ID> extends PersistentEntit
this.persistentEntity = persistentEntity;
}
@Override
public boolean isNew(T entity) {
return entity instanceof Persistable ? ((Persistable) entity).isNew() : super.isNew(entity);
}
@SuppressWarnings("unchecked")
@Nullable
@Override
public ID getId(T entity) {
return entity instanceof Persistable ? ((Persistable<ID>)entity).getId() : super.getId(entity);
}
/*
* (non-Javadoc)
* @see org.springframework.data.jdbc.mapping.model.JdbcPersistentEntityInformation#setId(java.lang.Object, java.util.Optional)

View File

@@ -18,9 +18,7 @@ package org.springframework.data.jdbc.repository.support;
import org.springframework.context.ApplicationEventPublisher;
import org.springframework.data.jdbc.core.DataAccessStrategy;
import org.springframework.data.jdbc.core.JdbcEntityTemplate;
import org.springframework.data.jdbc.mapping.model.BasicJdbcPersistentEntityInformation;
import org.springframework.data.jdbc.mapping.model.JdbcMappingContext;
import org.springframework.data.jdbc.mapping.model.JdbcPersistentEntity;
import org.springframework.data.jdbc.mapping.model.JdbcPersistentEntityInformation;
import org.springframework.data.jdbc.repository.SimpleJdbcRepository;
import org.springframework.data.repository.core.EntityInformation;
@@ -50,9 +48,7 @@ public class JdbcRepositoryFactory extends RepositoryFactorySupport {
@SuppressWarnings("unchecked")
@Override
public <T, ID> EntityInformation<T, ID> getEntityInformation(Class<T> aClass) {
JdbcPersistentEntity<?> persistentEntity = context.getRequiredPersistentEntity(aClass);
return new BasicJdbcPersistentEntityInformation<>((JdbcPersistentEntity<T>) persistentEntity);
return (EntityInformation<T, ID>) context.getRequiredPersistentEntityInformation(aClass);
}
@SuppressWarnings("unchecked")