Skip to content

Commit 4e0d6a9

Browse files
committed
Polish 3b58fec
* Add query creation test in JpaNamedQueryProviderTests * Make JpaPagingItemReaderNamedQueryIntegrationTests consistent with JpaPagingItemReaderNativeQueryIntegrationTests
1 parent 3b58fec commit 4e0d6a9

File tree

5 files changed

+65
-24
lines changed

5 files changed

+65
-24
lines changed

spring-batch-infrastructure/src/main/java/org/springframework/batch/item/database/orm/JpaNamedQueryProvider.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ public class JpaNamedQueryProvider<E> extends AbstractJpaQueryProvider {
3939

4040
@Override
4141
public Query createQuery() {
42-
return getEntityManager().createNamedQuery(namedQuery, entityClass);
42+
return getEntityManager().createNamedQuery(this.namedQuery, this.entityClass);
4343
}
4444

4545
/**
@@ -58,7 +58,7 @@ public void setEntityClass(Class<E> entityClazz) {
5858

5959
@Override
6060
public void afterPropertiesSet() throws Exception {
61-
Assert.isTrue(StringUtils.hasText(namedQuery), "Named query cannot be empty");
62-
Assert.notNull(entityClass, "Entity class cannot be NULL");
61+
Assert.isTrue(StringUtils.hasText(this.namedQuery), "Named query cannot be empty");
62+
Assert.notNull(this.entityClass, "Entity class cannot be NULL");
6363
}
6464
}

spring-batch-infrastructure/src/test/java/org/springframework/batch/item/database/JpaPagingItemReaderNamedQueryIntegrationTests.java

Lines changed: 23 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -17,41 +17,45 @@
1717

1818
import javax.persistence.EntityManagerFactory;
1919

20-
import org.springframework.batch.item.ItemReader;
20+
import org.junit.runner.RunWith;
21+
2122
import org.springframework.batch.item.database.orm.JpaNamedQueryProvider;
2223
import org.springframework.batch.item.sample.Foo;
23-
import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;
24-
import org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter;
24+
import org.springframework.beans.factory.annotation.Autowired;
25+
import org.springframework.test.context.ContextConfiguration;
26+
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
2527

2628
/**
2729
* Integration Test for {@link JpaPagingItemReader} and {@link JpaNamedQueryProvider}.
2830
*
2931
* @author Parikshit Dutta
32+
* @author Mahmoud Ben Hassine
3033
*/
31-
public class JpaPagingItemReaderNamedQueryIntegrationTests
32-
extends AbstractGenericDataSourceItemReaderIntegrationTests {
34+
@RunWith(SpringJUnit4ClassRunner.class)
35+
@ContextConfiguration(locations={"JpaPagingItemReaderParameterTests-context.xml"})
36+
public class JpaPagingItemReaderNamedQueryIntegrationTests extends AbstractPagingItemReaderParameterTests {
3337

38+
@Autowired
39+
private EntityManagerFactory entityManagerFactory;
40+
3441
@Override
35-
protected ItemReader<Foo> createItemReader() throws Exception {
36-
LocalContainerEntityManagerFactoryBean factoryBean = new LocalContainerEntityManagerFactoryBean();
37-
factoryBean.setDataSource(dataSource);
38-
factoryBean.setJpaVendorAdapter(new HibernateJpaVendorAdapter());
39-
factoryBean.setPersistenceUnitName("bar");
40-
factoryBean.afterPropertiesSet();
42+
protected AbstractPagingItemReader<Foo> getItemReader() throws Exception {
43+
44+
String namedQuery = "foosStartingFrom2";
4145

42-
EntityManagerFactory entityManagerFactory = factoryBean.getObject();
46+
JpaPagingItemReader<Foo> reader = new JpaPagingItemReader<>();
4347

48+
//creating a named query provider as it would be created in configuration
4449
JpaNamedQueryProvider<Foo> jpaNamedQueryProvider = new JpaNamedQueryProvider<>();
45-
jpaNamedQueryProvider.setNamedQuery("allFoos");
50+
jpaNamedQueryProvider.setNamedQuery(namedQuery);
4651
jpaNamedQueryProvider.setEntityClass(Foo.class);
4752
jpaNamedQueryProvider.afterPropertiesSet();
4853

49-
JpaPagingItemReader<Foo> inputSource = new JpaPagingItemReader<>();
50-
inputSource.setEntityManagerFactory(entityManagerFactory);
51-
inputSource.setQueryProvider(jpaNamedQueryProvider);
52-
inputSource.afterPropertiesSet();
53-
inputSource.setSaveState(true);
54+
reader.setEntityManagerFactory(entityManagerFactory);
55+
reader.setQueryProvider(jpaNamedQueryProvider);
56+
reader.afterPropertiesSet();
57+
reader.setSaveState(true);
5458

55-
return inputSource;
59+
return reader;
5660
}
5761
}

spring-batch-infrastructure/src/test/java/org/springframework/batch/item/database/builder/JpaPagingItemReaderBuilderTests.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@
5252
/**
5353
* @author Michael Minella
5454
* @author Parikshit Dutta
55+
* @author Mahmoud Ben Hassine
5556
*/
5657
public class JpaPagingItemReaderBuilderTests {
5758

@@ -173,7 +174,7 @@ public void testConfigurationNamedQueryProvider() throws Exception {
173174
}
174175

175176
@Test
176-
public void testConfigurationQueryProvider() throws Exception {
177+
public void testConfigurationNativeQueryProvider() throws Exception {
177178

178179
JpaNativeQueryProvider<Foo> provider = new JpaNativeQueryProvider<>();
179180
provider.setEntityClass(Foo.class);

spring-batch-infrastructure/src/test/java/org/springframework/batch/item/database/orm/JpaNamedQueryProviderTests.java

Lines changed: 33 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,15 +15,26 @@
1515
*/
1616
package org.springframework.batch.item.database.orm;
1717

18-
import static org.junit.Assert.*;
18+
import javax.persistence.EntityManager;
19+
import javax.persistence.Query;
20+
import javax.persistence.TypedQuery;
21+
22+
import static org.junit.Assert.assertEquals;
23+
import static org.mockito.Mockito.mock;
24+
import static org.mockito.Mockito.verify;
25+
import static org.mockito.Mockito.when;
26+
1927
import org.junit.Test;
28+
import org.mockito.Mockito;
2029

2130
import org.springframework.batch.item.sample.Foo;
31+
import org.springframework.util.Assert;
2232

2333
/**
2434
* Test for {@link JpaNamedQueryProvider}s.
2535
*
2636
* @author Parikshit Dutta
37+
* @author Mahmoud Ben Hassine
2738
*/
2839
public class JpaNamedQueryProviderTests {
2940

@@ -52,4 +63,25 @@ public void testJpaNamedQueryProviderEntityClassIsProvided() {
5263
assertEquals("Entity class cannot be NULL", exception.getMessage());
5364
}
5465
}
66+
67+
@Test
68+
public void testNamedQueryCreation() throws Exception {
69+
// given
70+
String namedQuery = "allFoos";
71+
TypedQuery<Foo> query = mock(TypedQuery.class);
72+
EntityManager entityManager = Mockito.mock(EntityManager.class);
73+
when(entityManager.createNamedQuery(namedQuery, Foo.class)).thenReturn(query);
74+
JpaNamedQueryProvider<Foo> jpaNamedQueryProvider = new JpaNamedQueryProvider<>();
75+
jpaNamedQueryProvider.setEntityManager(entityManager);
76+
jpaNamedQueryProvider.setEntityClass(Foo.class);
77+
jpaNamedQueryProvider.setNamedQuery(namedQuery);
78+
jpaNamedQueryProvider.afterPropertiesSet();
79+
80+
// when
81+
Query result = jpaNamedQueryProvider.createQuery();
82+
83+
// then
84+
Assert.notNull(result, "Result query must not be null");
85+
verify(entityManager).createNamedQuery(namedQuery, Foo.class);
86+
}
5587
}

spring-batch-infrastructure/src/test/resources/org/springframework/batch/item/database/Foo.hbm.xml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,4 +15,8 @@
1515
<query name="allFoos">
1616
from Foo
1717
</query>
18+
19+
<query name="foosStartingFrom2">
20+
from Foo where value >= 2
21+
</query>
1822
</hibernate-mapping>

0 commit comments

Comments
 (0)