From c4b39247fbfaa6e47bdc2f7fe1706cc737a9a27d Mon Sep 17 00:00:00 2001 From: Ruslan Mustaev Date: Sun, 2 Feb 2020 20:56:52 +0300 Subject: [PATCH] Add usePersist chain method to JpaItemWriterBuilder --- .../database/builder/JpaItemWriterBuilder.java | 15 +++++++++++++++ .../builder/JpaItemWriterBuilderTests.java | 18 ++++++++++++++++++ 2 files changed, 33 insertions(+) diff --git a/spring-batch-infrastructure/src/main/java/org/springframework/batch/item/database/builder/JpaItemWriterBuilder.java b/spring-batch-infrastructure/src/main/java/org/springframework/batch/item/database/builder/JpaItemWriterBuilder.java index ee9b2afbf4..8272e14526 100644 --- a/spring-batch-infrastructure/src/main/java/org/springframework/batch/item/database/builder/JpaItemWriterBuilder.java +++ b/spring-batch-infrastructure/src/main/java/org/springframework/batch/item/database/builder/JpaItemWriterBuilder.java @@ -30,6 +30,7 @@ public class JpaItemWriterBuilder { private EntityManagerFactory entityManagerFactory; + private boolean usePersist = false; /** * The JPA {@link EntityManagerFactory} to obtain an entity manager from. Required. @@ -44,6 +45,19 @@ public JpaItemWriterBuilder entityManagerFactory(EntityManagerFactory entityM return this; } + /** + * Set whether the entity manager should perform a persist instead of a merge. + * + * @param usePersist defaults to false + * @return this instance for method chaining + * @see JpaItemWriter#setUsePersist(boolean) + */ + public JpaItemWriterBuilder usePersist(boolean usePersist) { + this.usePersist = usePersist; + + return this; + } + /** * Returns a fully built {@link JpaItemWriter}. * @@ -55,6 +69,7 @@ public JpaItemWriter build() { JpaItemWriter writer = new JpaItemWriter<>(); writer.setEntityManagerFactory(this.entityManagerFactory); + writer.setUsePersist(this.usePersist); return writer; } diff --git a/spring-batch-infrastructure/src/test/java/org/springframework/batch/item/database/builder/JpaItemWriterBuilderTests.java b/spring-batch-infrastructure/src/test/java/org/springframework/batch/item/database/builder/JpaItemWriterBuilderTests.java index 94e5c0a513..b1804f94a3 100644 --- a/spring-batch-infrastructure/src/test/java/org/springframework/batch/item/database/builder/JpaItemWriterBuilderTests.java +++ b/spring-batch-infrastructure/src/test/java/org/springframework/batch/item/database/builder/JpaItemWriterBuilderTests.java @@ -84,4 +84,22 @@ public void testValidation() { assertEquals("Incorrect message", "EntityManagerFactory must be provided", ise.getMessage()); } } + + @Test + public void testPersist() throws Exception { + JpaItemWriter itemWriter = new JpaItemWriterBuilder() + .entityManagerFactory(this.entityManagerFactory) + .usePersist(true) + .build(); + + itemWriter.afterPropertiesSet(); + + List items = Arrays.asList("foo", "bar"); + + itemWriter.write(items); + + verify(this.entityManager).persist(items.get(0)); + verify(this.entityManager).persist(items.get(1)); + } + }