diff --git a/src/main/java/org/springframework/data/jpa/repository/query/AbstractJpaQuery.java b/src/main/java/org/springframework/data/jpa/repository/query/AbstractJpaQuery.java index aad1c66c8..da4c5e92b 100644 --- a/src/main/java/org/springframework/data/jpa/repository/query/AbstractJpaQuery.java +++ b/src/main/java/org/springframework/data/jpa/repository/query/AbstractJpaQuery.java @@ -109,7 +109,7 @@ public abstract class AbstractJpaQuery implements RepositoryQuery { case PAGING: return new PagedExecution(getParameters()); case MODIFYING: - EntityMetadata metadata = method.getEntityMetadata(); + EntityMetadata metadata = method.getEntityInformation(); return method.getClearAutomatically() ? new ModifyingExecution( metadata, em) : new ModifyingExecution(metadata, null); default: diff --git a/src/main/java/org/springframework/data/jpa/repository/query/PartTreeJpaQuery.java b/src/main/java/org/springframework/data/jpa/repository/query/PartTreeJpaQuery.java index 40df3b45a..090e001b5 100644 --- a/src/main/java/org/springframework/data/jpa/repository/query/PartTreeJpaQuery.java +++ b/src/main/java/org/springframework/data/jpa/repository/query/PartTreeJpaQuery.java @@ -49,7 +49,7 @@ public class PartTreeJpaQuery extends AbstractJpaQuery { super(method, em); this.tree = - new PartTree(method.getName(), method.getEntityMetadata() + new PartTree(method.getName(), method.getEntityInformation() .getJavaType()); this.method = method; } @@ -68,7 +68,7 @@ public class PartTreeJpaQuery extends AbstractJpaQuery { ParameterAccessor accessor = new ParametersParameterAccessor(getParameters(), parameters); - EntityMetadata metadata = method.getEntityMetadata(); + EntityMetadata metadata = method.getEntityInformation(); JpaQueryCreator jpaQueryCreator = new JpaQueryCreator(tree, accessor, metadata.getJavaType(), getEntityManager()); @@ -97,8 +97,8 @@ public class PartTreeJpaQuery extends AbstractJpaQuery { CriteriaQuery query = new JpaCountQueryCreator(tree, new ParametersParameterAccessor( getParameters(), parameters), method - .getEntityMetadata().getJavaType(), getEntityManager()) - .createQuery(); + .getEntityInformation().getJavaType(), + getEntityManager()).createQuery(); return getEntityManager().createQuery(query); } diff --git a/src/main/java/org/springframework/data/jpa/repository/support/JpaEntityInformation.java b/src/main/java/org/springframework/data/jpa/repository/support/JpaEntityInformation.java index 343ae229e..52c62a0f0 100644 --- a/src/main/java/org/springframework/data/jpa/repository/support/JpaEntityInformation.java +++ b/src/main/java/org/springframework/data/jpa/repository/support/JpaEntityInformation.java @@ -15,6 +15,8 @@ */ package org.springframework.data.jpa.repository.support; +import java.io.Serializable; + import javax.persistence.metamodel.SingularAttribute; import org.springframework.data.repository.support.EntityInformation; @@ -26,7 +28,8 @@ import org.springframework.data.repository.support.EntityInformation; * * @author Oliver Gierke */ -public interface JpaEntityInformation extends EntityInformation { +public interface JpaEntityInformation extends + EntityInformation { /** * Returns the id attribute of the entity. diff --git a/src/main/java/org/springframework/data/jpa/repository/support/JpaMetamodelEntityInformation.java b/src/main/java/org/springframework/data/jpa/repository/support/JpaMetamodelEntityInformation.java index 40b16178d..3dcad3de4 100644 --- a/src/main/java/org/springframework/data/jpa/repository/support/JpaMetamodelEntityInformation.java +++ b/src/main/java/org/springframework/data/jpa/repository/support/JpaMetamodelEntityInformation.java @@ -15,6 +15,7 @@ */ package org.springframework.data.jpa.repository.support; +import java.io.Serializable; import java.lang.reflect.Field; import java.lang.reflect.Member; import java.lang.reflect.Method; @@ -35,8 +36,8 @@ import org.springframework.util.ReflectionUtils; * * @author Oliver Gierke */ -public class JpaMetamodelEntityInformation extends AbstractEntityInformation - implements JpaEntityInformation { +public class JpaMetamodelEntityInformation extends + AbstractEntityInformation implements JpaEntityInformation { private final SingularAttribute attribute; @@ -48,7 +49,8 @@ public class JpaMetamodelEntityInformation extends AbstractEntityInformation< * @param domainClass * @param metamodel */ - public JpaMetamodelEntityInformation(Class domainClass, Metamodel metamodel) { + public JpaMetamodelEntityInformation(Class domainClass, + Metamodel metamodel) { super(domainClass); @@ -71,9 +73,23 @@ public class JpaMetamodelEntityInformation extends AbstractEntityInformation< * org.springframework.data.repository.support.IdAware#getId(java.lang.Object * ) */ - public Object getId(T entity) { + @SuppressWarnings("unchecked") + public ID getId(T entity) { - return getMemberValue(attribute.getJavaMember(), entity); + return (ID) getMemberValue(attribute.getJavaMember(), entity); + } + + + /* + * (non-Javadoc) + * + * @see + * org.springframework.data.repository.support.EntityInformation#getIdType() + */ + @SuppressWarnings("unchecked") + public Class getIdType() { + + return (Class) attribute.getJavaType(); } diff --git a/src/main/java/org/springframework/data/jpa/repository/support/JpaPersistableEntityInformation.java b/src/main/java/org/springframework/data/jpa/repository/support/JpaPersistableEntityInformation.java index 7bc9ccbe3..b9149e02c 100644 --- a/src/main/java/org/springframework/data/jpa/repository/support/JpaPersistableEntityInformation.java +++ b/src/main/java/org/springframework/data/jpa/repository/support/JpaPersistableEntityInformation.java @@ -28,8 +28,8 @@ import org.springframework.data.domain.Persistable; * * @author Oliver Gierke */ -public class JpaPersistableEntityInformation extends - JpaMetamodelEntityInformation { +public class JpaPersistableEntityInformation, ID extends Serializable> + extends JpaMetamodelEntityInformation { /** * Creates a new {@link JpaPersistableEntityInformation} for the given @@ -53,7 +53,7 @@ public class JpaPersistableEntityInformation extends * #getId(java.lang.Object) */ @Override - public Serializable getId(T entity) { + public ID getId(T entity) { return entity.getId(); } diff --git a/src/main/java/org/springframework/data/jpa/repository/support/JpaRepositoryFactory.java b/src/main/java/org/springframework/data/jpa/repository/support/JpaRepositoryFactory.java index 7d7297602..6543dcb73 100644 --- a/src/main/java/org/springframework/data/jpa/repository/support/JpaRepositoryFactory.java +++ b/src/main/java/org/springframework/data/jpa/repository/support/JpaRepositoryFactory.java @@ -15,6 +15,8 @@ */ package org.springframework.data.jpa.repository.support; +import java.io.Serializable; + import javax.persistence.EntityManager; import org.springframework.data.jpa.repository.query.JpaQueryLookupStrategy; @@ -76,21 +78,15 @@ public class JpaRepositoryFactory extends RepositoryFactorySupport { * @return */ @SuppressWarnings({ "unchecked", "rawtypes" }) - protected Object getTargetRepository(RepositoryMetadata metadata, - EntityManager entityManager) { + protected Object getTargetRepository( + RepositoryMetadata metadata, EntityManager entityManager) { - JpaEntityInformation entityMetadata = - getEntityMetadata(metadata.getDomainClass()); + JpaEntityInformation entityMetadata = + getEntityInformation((Class) metadata.getDomainClass()); return new SimpleJpaRepository(entityMetadata, entityManager); } - protected JpaEntityInformation getEntityMetadata(Class domainClass) { - - return JpaClassUtils.getMetadata(domainClass, entityManager); - } - - /* * (non-Javadoc) * @@ -118,4 +114,21 @@ public class JpaRepositoryFactory extends RepositoryFactorySupport { return JpaQueryLookupStrategy.create(entityManager, key, extractor); } + + + /* + * (non-Javadoc) + * + * @see + * org.springframework.data.repository.support.RepositoryFactorySupport# + * getEntityInformation(java.lang.Class) + */ + @Override + @SuppressWarnings("unchecked") + public JpaEntityInformation getEntityInformation( + Class domainClass) { + + return (JpaEntityInformation) JpaClassUtils.getMetadata( + domainClass, entityManager); + } } diff --git a/src/main/java/org/springframework/data/jpa/repository/support/JpaRepositoryFactoryBean.java b/src/main/java/org/springframework/data/jpa/repository/support/JpaRepositoryFactoryBean.java index 9a05a8d83..d5849a111 100644 --- a/src/main/java/org/springframework/data/jpa/repository/support/JpaRepositoryFactoryBean.java +++ b/src/main/java/org/springframework/data/jpa/repository/support/JpaRepositoryFactoryBean.java @@ -15,6 +15,8 @@ */ package org.springframework.data.jpa.repository.support; +import java.io.Serializable; + import javax.persistence.EntityManager; import javax.persistence.PersistenceContext; @@ -33,8 +35,8 @@ import org.springframework.util.Assert; * @author Eberhard Wolff * @param the type of the repository */ -public class JpaRepositoryFactoryBean> extends - TransactionalRepositoryFactoryBeanSupport { +public class JpaRepositoryFactoryBean, S, ID extends Serializable> + extends TransactionalRepositoryFactoryBeanSupport { private EntityManager entityManager; diff --git a/src/main/java/org/springframework/data/jpa/repository/support/SimpleJpaRepository.java b/src/main/java/org/springframework/data/jpa/repository/support/SimpleJpaRepository.java index 4e956f43a..2ed04572f 100644 --- a/src/main/java/org/springframework/data/jpa/repository/support/SimpleJpaRepository.java +++ b/src/main/java/org/springframework/data/jpa/repository/support/SimpleJpaRepository.java @@ -19,7 +19,6 @@ import static org.springframework.data.jpa.repository.query.QueryUtils.*; import java.io.Serializable; import java.util.ArrayList; -import java.util.Iterator; import java.util.List; import javax.persistence.EntityManager; @@ -27,7 +26,6 @@ import javax.persistence.NoResultException; import javax.persistence.TypedQuery; import javax.persistence.criteria.CriteriaBuilder; import javax.persistence.criteria.CriteriaQuery; -import javax.persistence.criteria.Path; import javax.persistence.criteria.Predicate; import javax.persistence.criteria.Root; @@ -54,7 +52,7 @@ import org.springframework.util.Assert; public class SimpleJpaRepository implements JpaRepository { - private final JpaEntityInformation entityInformation; + private final JpaEntityInformation entityInformation; private final EntityManager em; private final PersistenceProvider provider; @@ -66,7 +64,7 @@ public class SimpleJpaRepository implements * @param entityMetadata * @param entityManager */ - public SimpleJpaRepository(JpaEntityInformation entityMetadata, + public SimpleJpaRepository(JpaEntityInformation entityMetadata, EntityManager entityManager) { Assert.notNull(entityMetadata); diff --git a/src/main/java/org/springframework/data/jpa/repository/utils/JpaClassUtils.java b/src/main/java/org/springframework/data/jpa/repository/utils/JpaClassUtils.java index ce6f30ab4..09ea8ccda 100644 --- a/src/main/java/org/springframework/data/jpa/repository/utils/JpaClassUtils.java +++ b/src/main/java/org/springframework/data/jpa/repository/utils/JpaClassUtils.java @@ -91,8 +91,8 @@ public abstract class JpaClassUtils { * @return */ @SuppressWarnings({ "rawtypes", "unchecked" }) - public static JpaEntityInformation getMetadata(Class domainClass, - EntityManager em) { + public static JpaEntityInformation getMetadata( + Class domainClass, EntityManager em) { Metamodel metamodel = em.getMetamodel(); diff --git a/src/test/java/org/springframework/data/jpa/repository/config/QueryLookupStrategyTests.java b/src/test/java/org/springframework/data/jpa/repository/config/QueryLookupStrategyTests.java index ad8acee3c..9be590a28 100644 --- a/src/test/java/org/springframework/data/jpa/repository/config/QueryLookupStrategyTests.java +++ b/src/test/java/org/springframework/data/jpa/repository/config/QueryLookupStrategyTests.java @@ -49,7 +49,7 @@ public class QueryLookupStrategyTests { @Test public void assertUseDeclaredQuery() { - JpaRepositoryFactoryBean factory = + JpaRepositoryFactoryBean factory = context.getBean("&roleRepository", JpaRepositoryFactoryBean.class); diff --git a/src/test/java/org/springframework/data/jpa/repository/custom/CustomGenericJpaRepository.java b/src/test/java/org/springframework/data/jpa/repository/custom/CustomGenericJpaRepository.java index 01803d4e6..34e17ce13 100644 --- a/src/test/java/org/springframework/data/jpa/repository/custom/CustomGenericJpaRepository.java +++ b/src/test/java/org/springframework/data/jpa/repository/custom/CustomGenericJpaRepository.java @@ -36,7 +36,7 @@ public class CustomGenericJpaRepository extends * @param domainClass * @param entityManager */ - public CustomGenericJpaRepository(JpaEntityInformation metadata, + public CustomGenericJpaRepository(JpaEntityInformation metadata, EntityManager entityManager) { super(metadata, entityManager); diff --git a/src/test/java/org/springframework/data/jpa/repository/custom/CustomGenericJpaRepositoryFactory.java b/src/test/java/org/springframework/data/jpa/repository/custom/CustomGenericJpaRepositoryFactory.java index 13c24e834..ae26bb2b6 100644 --- a/src/test/java/org/springframework/data/jpa/repository/custom/CustomGenericJpaRepositoryFactory.java +++ b/src/test/java/org/springframework/data/jpa/repository/custom/CustomGenericJpaRepositoryFactory.java @@ -55,7 +55,7 @@ public class CustomGenericJpaRepositoryFactory extends JpaRepositoryFactory { protected Object getTargetRepository(RepositoryMetadata metadata, EntityManager em) { - JpaEntityInformation entityMetadata = + JpaEntityInformation entityMetadata = mock(JpaEntityInformation.class); when(entityMetadata.getJavaType()).thenReturn( (Class) metadata.getDomainClass()); diff --git a/src/test/java/org/springframework/data/jpa/repository/custom/CustomGenericJpaRepositoryFactoryBean.java b/src/test/java/org/springframework/data/jpa/repository/custom/CustomGenericJpaRepositoryFactoryBean.java index 0345b9a63..28d82a98f 100644 --- a/src/test/java/org/springframework/data/jpa/repository/custom/CustomGenericJpaRepositoryFactoryBean.java +++ b/src/test/java/org/springframework/data/jpa/repository/custom/CustomGenericJpaRepositoryFactoryBean.java @@ -15,6 +15,8 @@ */ package org.springframework.data.jpa.repository.custom; +import java.io.Serializable; + import javax.persistence.EntityManager; import org.springframework.data.jpa.repository.JpaRepository; @@ -28,8 +30,8 @@ import org.springframework.data.repository.support.RepositoryFactorySupport; * @author Gil Markham * @author Oliver Gierke */ -public class CustomGenericJpaRepositoryFactoryBean> - extends JpaRepositoryFactoryBean { +public class CustomGenericJpaRepositoryFactoryBean> + extends JpaRepositoryFactoryBean { /* * (non-Javadoc) diff --git a/src/test/java/org/springframework/data/jpa/repository/support/JpaRepositoryFactoryBeanUnitTests.java b/src/test/java/org/springframework/data/jpa/repository/support/JpaRepositoryFactoryBeanUnitTests.java index d07bd60f3..1895ed111 100644 --- a/src/test/java/org/springframework/data/jpa/repository/support/JpaRepositoryFactoryBeanUnitTests.java +++ b/src/test/java/org/springframework/data/jpa/repository/support/JpaRepositoryFactoryBeanUnitTests.java @@ -19,6 +19,7 @@ import static org.junit.Assert.*; import static org.mockito.Matchers.*; import static org.mockito.Mockito.*; +import java.io.Serializable; import java.util.HashMap; import java.util.Map; @@ -49,7 +50,7 @@ import org.springframework.data.repository.support.RepositoryFactorySupport; @RunWith(MockitoJUnitRunner.class) public class JpaRepositoryFactoryBeanUnitTests { - JpaRepositoryFactoryBean factoryBean; + JpaRepositoryFactoryBean factoryBean; @Mock EntityManager entityManager; @@ -79,7 +80,7 @@ public class JpaRepositoryFactoryBeanUnitTests { // Setup standard factory configuration factoryBean = - new DummyJpaRepositoryFactoryBean(); + new DummyJpaRepositoryFactoryBean(); factoryBean.setRepositoryInterface(SimpleSampleRepository.class); factoryBean.setEntityManager(entityManager); } @@ -128,12 +129,13 @@ public class JpaRepositoryFactoryBeanUnitTests { @Test(expected = IllegalArgumentException.class) public void preventsUnsetRepositoryInterface() throws Exception { - factoryBean = new JpaRepositoryFactoryBean(); + factoryBean = + new JpaRepositoryFactoryBean(); factoryBean.afterPropertiesSet(); } - private class DummyJpaRepositoryFactoryBean> - extends JpaRepositoryFactoryBean { + private class DummyJpaRepositoryFactoryBean, S, ID extends Serializable> + extends JpaRepositoryFactoryBean { /* * (non-Javadoc) diff --git a/src/test/java/org/springframework/data/jpa/repository/support/JpaRepositoryFactoryUnitTests.java b/src/test/java/org/springframework/data/jpa/repository/support/JpaRepositoryFactoryUnitTests.java index 512a5cd72..9bd54ef76 100644 --- a/src/test/java/org/springframework/data/jpa/repository/support/JpaRepositoryFactoryUnitTests.java +++ b/src/test/java/org/springframework/data/jpa/repository/support/JpaRepositoryFactoryUnitTests.java @@ -18,6 +18,7 @@ package org.springframework.data.jpa.repository.support; import static junit.framework.Assert.*; import java.io.IOException; +import java.io.Serializable; import javax.persistence.EntityManager; @@ -45,7 +46,7 @@ public class JpaRepositoryFactoryUnitTests { @Mock EntityManager entityManager; @Mock - JpaEntityInformation metadata; + JpaEntityInformation metadata; @Before @@ -55,11 +56,12 @@ public class JpaRepositoryFactoryUnitTests { factory = new JpaRepositoryFactory(entityManager) { @Override - protected JpaEntityInformation getEntityMetadata( - java.lang.Class domainClass) { + @SuppressWarnings("unchecked") + public JpaEntityInformation getEntityInformation( + Class domainClass) { - return metadata; - } + return (JpaEntityInformation) metadata; + }; }; }