diff --git a/spring-batch-infrastructure/src/main/java/org/springframework/batch/item/database/orm/JpaNamedQueryProvider.java b/spring-batch-infrastructure/src/main/java/org/springframework/batch/item/database/orm/JpaNamedQueryProvider.java index 37829d6a3..3981de2bd 100644 --- a/spring-batch-infrastructure/src/main/java/org/springframework/batch/item/database/orm/JpaNamedQueryProvider.java +++ b/spring-batch-infrastructure/src/main/java/org/springframework/batch/item/database/orm/JpaNamedQueryProvider.java @@ -39,7 +39,7 @@ public class JpaNamedQueryProvider extends AbstractJpaQueryProvider { @Override public Query createQuery() { - return getEntityManager().createNamedQuery(namedQuery, entityClass); + return getEntityManager().createNamedQuery(this.namedQuery, this.entityClass); } /** @@ -58,7 +58,7 @@ public class JpaNamedQueryProvider extends AbstractJpaQueryProvider { @Override public void afterPropertiesSet() throws Exception { - Assert.isTrue(StringUtils.hasText(namedQuery), "Named query cannot be empty"); - Assert.notNull(entityClass, "Entity class cannot be NULL"); + Assert.isTrue(StringUtils.hasText(this.namedQuery), "Named query cannot be empty"); + Assert.notNull(this.entityClass, "Entity class cannot be NULL"); } } diff --git a/spring-batch-infrastructure/src/test/java/org/springframework/batch/item/database/JpaPagingItemReaderNamedQueryIntegrationTests.java b/spring-batch-infrastructure/src/test/java/org/springframework/batch/item/database/JpaPagingItemReaderNamedQueryIntegrationTests.java index cc780840b..eeb1e67f7 100644 --- a/spring-batch-infrastructure/src/test/java/org/springframework/batch/item/database/JpaPagingItemReaderNamedQueryIntegrationTests.java +++ b/spring-batch-infrastructure/src/test/java/org/springframework/batch/item/database/JpaPagingItemReaderNamedQueryIntegrationTests.java @@ -17,41 +17,45 @@ package org.springframework.batch.item.database; import javax.persistence.EntityManagerFactory; -import org.springframework.batch.item.ItemReader; +import org.junit.runner.RunWith; + import org.springframework.batch.item.database.orm.JpaNamedQueryProvider; import org.springframework.batch.item.sample.Foo; -import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean; -import org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; /** * Integration Test for {@link JpaPagingItemReader} and {@link JpaNamedQueryProvider}. * * @author Parikshit Dutta + * @author Mahmoud Ben Hassine */ -public class JpaPagingItemReaderNamedQueryIntegrationTests - extends AbstractGenericDataSourceItemReaderIntegrationTests { +@RunWith(SpringJUnit4ClassRunner.class) +@ContextConfiguration(locations={"JpaPagingItemReaderParameterTests-context.xml"}) +public class JpaPagingItemReaderNamedQueryIntegrationTests extends AbstractPagingItemReaderParameterTests { + @Autowired + private EntityManagerFactory entityManagerFactory; + @Override - protected ItemReader createItemReader() throws Exception { - LocalContainerEntityManagerFactoryBean factoryBean = new LocalContainerEntityManagerFactoryBean(); - factoryBean.setDataSource(dataSource); - factoryBean.setJpaVendorAdapter(new HibernateJpaVendorAdapter()); - factoryBean.setPersistenceUnitName("bar"); - factoryBean.afterPropertiesSet(); + protected AbstractPagingItemReader getItemReader() throws Exception { - EntityManagerFactory entityManagerFactory = factoryBean.getObject(); + String namedQuery = "foosStartingFrom2"; + JpaPagingItemReader reader = new JpaPagingItemReader<>(); + + //creating a named query provider as it would be created in configuration JpaNamedQueryProvider jpaNamedQueryProvider = new JpaNamedQueryProvider<>(); - jpaNamedQueryProvider.setNamedQuery("allFoos"); + jpaNamedQueryProvider.setNamedQuery(namedQuery); jpaNamedQueryProvider.setEntityClass(Foo.class); jpaNamedQueryProvider.afterPropertiesSet(); - JpaPagingItemReader inputSource = new JpaPagingItemReader<>(); - inputSource.setEntityManagerFactory(entityManagerFactory); - inputSource.setQueryProvider(jpaNamedQueryProvider); - inputSource.afterPropertiesSet(); - inputSource.setSaveState(true); + reader.setEntityManagerFactory(entityManagerFactory); + reader.setQueryProvider(jpaNamedQueryProvider); + reader.afterPropertiesSet(); + reader.setSaveState(true); - return inputSource; + return reader; } } diff --git a/spring-batch-infrastructure/src/test/java/org/springframework/batch/item/database/builder/JpaPagingItemReaderBuilderTests.java b/spring-batch-infrastructure/src/test/java/org/springframework/batch/item/database/builder/JpaPagingItemReaderBuilderTests.java index d9bea71ba..a88f0df42 100644 --- a/spring-batch-infrastructure/src/test/java/org/springframework/batch/item/database/builder/JpaPagingItemReaderBuilderTests.java +++ b/spring-batch-infrastructure/src/test/java/org/springframework/batch/item/database/builder/JpaPagingItemReaderBuilderTests.java @@ -52,6 +52,7 @@ import static org.junit.Assert.fail; /** * @author Michael Minella * @author Parikshit Dutta + * @author Mahmoud Ben Hassine */ public class JpaPagingItemReaderBuilderTests { @@ -173,7 +174,7 @@ public class JpaPagingItemReaderBuilderTests { } @Test - public void testConfigurationQueryProvider() throws Exception { + public void testConfigurationNativeQueryProvider() throws Exception { JpaNativeQueryProvider provider = new JpaNativeQueryProvider<>(); provider.setEntityClass(Foo.class); diff --git a/spring-batch-infrastructure/src/test/java/org/springframework/batch/item/database/orm/JpaNamedQueryProviderTests.java b/spring-batch-infrastructure/src/test/java/org/springframework/batch/item/database/orm/JpaNamedQueryProviderTests.java index 84decf303..64cc04015 100644 --- a/spring-batch-infrastructure/src/test/java/org/springframework/batch/item/database/orm/JpaNamedQueryProviderTests.java +++ b/spring-batch-infrastructure/src/test/java/org/springframework/batch/item/database/orm/JpaNamedQueryProviderTests.java @@ -15,15 +15,26 @@ */ package org.springframework.batch.item.database.orm; -import static org.junit.Assert.*; +import javax.persistence.EntityManager; +import javax.persistence.Query; +import javax.persistence.TypedQuery; + +import static org.junit.Assert.assertEquals; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + import org.junit.Test; +import org.mockito.Mockito; import org.springframework.batch.item.sample.Foo; +import org.springframework.util.Assert; /** * Test for {@link JpaNamedQueryProvider}s. * * @author Parikshit Dutta + * @author Mahmoud Ben Hassine */ public class JpaNamedQueryProviderTests { @@ -52,4 +63,25 @@ public class JpaNamedQueryProviderTests { assertEquals("Entity class cannot be NULL", exception.getMessage()); } } + + @Test + public void testNamedQueryCreation() throws Exception { + // given + String namedQuery = "allFoos"; + TypedQuery query = mock(TypedQuery.class); + EntityManager entityManager = Mockito.mock(EntityManager.class); + when(entityManager.createNamedQuery(namedQuery, Foo.class)).thenReturn(query); + JpaNamedQueryProvider jpaNamedQueryProvider = new JpaNamedQueryProvider<>(); + jpaNamedQueryProvider.setEntityManager(entityManager); + jpaNamedQueryProvider.setEntityClass(Foo.class); + jpaNamedQueryProvider.setNamedQuery(namedQuery); + jpaNamedQueryProvider.afterPropertiesSet(); + + // when + Query result = jpaNamedQueryProvider.createQuery(); + + // then + Assert.notNull(result, "Result query must not be null"); + verify(entityManager).createNamedQuery(namedQuery, Foo.class); + } } diff --git a/spring-batch-infrastructure/src/test/resources/org/springframework/batch/item/database/Foo.hbm.xml b/spring-batch-infrastructure/src/test/resources/org/springframework/batch/item/database/Foo.hbm.xml index 7f05cc9ed..b3287cfea 100644 --- a/spring-batch-infrastructure/src/test/resources/org/springframework/batch/item/database/Foo.hbm.xml +++ b/spring-batch-infrastructure/src/test/resources/org/springframework/batch/item/database/Foo.hbm.xml @@ -15,4 +15,8 @@ from Foo + + + from Foo where value >= 2 +