From fe36a77f38b2df0073d4cf5dfd8d2a68a4c7737b Mon Sep 17 00:00:00 2001 From: Oliver Gierke Date: Fri, 9 Dec 2011 13:02:20 +0100 Subject: [PATCH] DATAJPA-135 - Improved extensibility of QueryDslRepositorySupport. Moved @PersistenceContext annotation to the setter method to make it overridable and thus re-configurable. Introduced protected getEntityManager() method to allow subclasses having access to the EntityManager. --- .../support/QueryDslRepositorySupport.java | 12 +++++-- ...yDslRepositorySupportIntegrationTests.java | 34 +++++++++++++++++++ .../QueryDslRepositorySupportTests.java | 6 ++++ src/test/resources/META-INF/persistence.xml | 6 +++- src/test/resources/querydsl.xml | 8 +++++ 5 files changed, 63 insertions(+), 3 deletions(-) diff --git a/src/main/java/org/springframework/data/jpa/repository/support/QueryDslRepositorySupport.java b/src/main/java/org/springframework/data/jpa/repository/support/QueryDslRepositorySupport.java index 22c181d0e..8d461b6bb 100644 --- a/src/main/java/org/springframework/data/jpa/repository/support/QueryDslRepositorySupport.java +++ b/src/main/java/org/springframework/data/jpa/repository/support/QueryDslRepositorySupport.java @@ -40,7 +40,6 @@ import com.mysema.query.types.path.PathBuilderFactory; @Repository public abstract class QueryDslRepositorySupport { - @PersistenceContext private EntityManager entityManager; private PathBuilderFactory builderFactory = new PathBuilderFactory(); @@ -49,6 +48,7 @@ public abstract class QueryDslRepositorySupport { * * @param entityManager must not be {@literal null} */ + @PersistenceContext public void setEntityManager(EntityManager entityManager) { Assert.notNull(entityManager); @@ -60,10 +60,18 @@ public abstract class QueryDslRepositorySupport { */ @PostConstruct public void validate() { - Assert.notNull(entityManager, "EntityManager must not be null!"); } + /** + * Returns the {@link EntityManager}. + * + * @return the entityManager + */ + protected EntityManager getEntityManager() { + return entityManager; + } + /** * Returns a fresh {@link JPQLQuery}. * diff --git a/src/test/java/org/springframework/data/jpa/repository/support/QueryDslRepositorySupportIntegrationTests.java b/src/test/java/org/springframework/data/jpa/repository/support/QueryDslRepositorySupportIntegrationTests.java index 01972a21e..7d5db1b45 100644 --- a/src/test/java/org/springframework/data/jpa/repository/support/QueryDslRepositorySupportIntegrationTests.java +++ b/src/test/java/org/springframework/data/jpa/repository/support/QueryDslRepositorySupportIntegrationTests.java @@ -18,6 +18,9 @@ package org.springframework.data.jpa.repository.support; import static org.hamcrest.CoreMatchers.*; import static org.junit.Assert.*; +import javax.persistence.EntityManager; +import javax.persistence.PersistenceContext; + import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; @@ -37,8 +40,39 @@ public class QueryDslRepositorySupportIntegrationTests { @Autowired UserRepository repository; + @Autowired + ReconfiguringUserRepositoryImpl reconfiguredRepo; + + @PersistenceContext(unitName = "querydsl") + EntityManager em; + @Test public void createsRepoCorrectly() { assertThat(repository, is(notNullValue())); } + + /** + * @see DATAJPA-135 + */ + @Test + public void createsReconfiguredRepoAccordingly() { + + assertThat(reconfiguredRepo, is(notNullValue())); + assertThat(reconfiguredRepo.getEntityManager().getEntityManagerFactory(), is(em.getEntityManagerFactory())); + } + + static class ReconfiguringUserRepositoryImpl extends QueryDslRepositorySupport { + + @Override + @PersistenceContext(unitName = "querydsl") + public void setEntityManager(EntityManager entityManager) { + super.setEntityManager(entityManager); + } + } + + static class EntityManagerContainer { + + @PersistenceContext(unitName = "querydsl") + EntityManager em; + } } diff --git a/src/test/java/org/springframework/data/jpa/repository/support/QueryDslRepositorySupportTests.java b/src/test/java/org/springframework/data/jpa/repository/support/QueryDslRepositorySupportTests.java index 268330d7e..48b5ba255 100644 --- a/src/test/java/org/springframework/data/jpa/repository/support/QueryDslRepositorySupportTests.java +++ b/src/test/java/org/springframework/data/jpa/repository/support/QueryDslRepositorySupportTests.java @@ -127,6 +127,12 @@ public class QueryDslRepositorySupportTests { private static final QUser user = QUser.user; + @Override + @PersistenceContext(unitName = "default") + public void setEntityManager(EntityManager entityManager) { + super.setEntityManager(entityManager); + } + public List findUsersByLastname(String lastname) { return from(user).where(user.lastname.eq(lastname)).list(user); diff --git a/src/test/resources/META-INF/persistence.xml b/src/test/resources/META-INF/persistence.xml index fdb3ca893..26226dc55 100644 --- a/src/test/resources/META-INF/persistence.xml +++ b/src/test/resources/META-INF/persistence.xml @@ -1,6 +1,6 @@ - + org.springframework.data.jpa.domain.AbstractPersistable org.springframework.data.jpa.domain.sample.User org.springframework.data.jpa.domain.sample.SpecialUser @@ -13,4 +13,8 @@ org.springframework.data.jpa.domain.sample.SampleEntityPK true + + org.springframework.data.jpa.domain.sample.User + true + diff --git a/src/test/resources/querydsl.xml b/src/test/resources/querydsl.xml index 7d895cca1..226050002 100644 --- a/src/test/resources/querydsl.xml +++ b/src/test/resources/querydsl.xml @@ -6,5 +6,13 @@ + + + + + + + +