From bc501e36b354cc5b02f9f9799b90baf172385a9a Mon Sep 17 00:00:00 2001 From: Emmanuel Yasa Date: Wed, 4 Nov 2020 23:38:29 +0800 Subject: [PATCH] BAEL-4643: JPA CascadeType.REMOVE vs orphanRemoval * Adds a test to OrphanRemovalIntegrationTest that expects a PersistenceException --- .../baeldung/jpa/removal/OrderRequest.java | 4 ++++ .../removal/OrphanRemovalIntegrationTest.java | 19 ++++++++++++++++--- 2 files changed, 20 insertions(+), 3 deletions(-) diff --git a/persistence-modules/java-jpa-3/src/main/java/com/baeldung/jpa/removal/OrderRequest.java b/persistence-modules/java-jpa-3/src/main/java/com/baeldung/jpa/removal/OrderRequest.java index 16ee3e0109..739c110d8c 100644 --- a/persistence-modules/java-jpa-3/src/main/java/com/baeldung/jpa/removal/OrderRequest.java +++ b/persistence-modules/java-jpa-3/src/main/java/com/baeldung/jpa/removal/OrderRequest.java @@ -34,6 +34,10 @@ public class OrderRequest { lineItems.remove(lineItem); } + public void setLineItems(List lineItems) { + this.lineItems = lineItems; + } + protected OrderRequest() { } } diff --git a/persistence-modules/java-jpa-3/src/test/java/com/baeldung/jpa/removal/OrphanRemovalIntegrationTest.java b/persistence-modules/java-jpa-3/src/test/java/com/baeldung/jpa/removal/OrphanRemovalIntegrationTest.java index 0ab6e4cfbc..615e8cf3a8 100644 --- a/persistence-modules/java-jpa-3/src/test/java/com/baeldung/jpa/removal/OrphanRemovalIntegrationTest.java +++ b/persistence-modules/java-jpa-3/src/test/java/com/baeldung/jpa/removal/OrphanRemovalIntegrationTest.java @@ -1,12 +1,13 @@ package com.baeldung.jpa.removal; import org.junit.Assert; -import org.junit.BeforeClass; +import org.junit.Before; import org.junit.Test; import javax.persistence.EntityManager; import javax.persistence.EntityManagerFactory; import javax.persistence.Persistence; +import javax.persistence.PersistenceException; import javax.persistence.TypedQuery; import javax.persistence.criteria.CriteriaBuilder; import javax.persistence.criteria.CriteriaQuery; @@ -19,8 +20,8 @@ public class OrphanRemovalIntegrationTest { private static EntityManagerFactory factory; private static EntityManager entityManager; - @BeforeClass - public static void setup() { + @Before + public void setup() { factory = Persistence.createEntityManagerFactory("jpa-h2-removal"); entityManager = factory.createEntityManager(); } @@ -41,6 +42,18 @@ public class OrphanRemovalIntegrationTest { Assert.assertEquals(2, findAllLineItem().size()); } + @Test(expected = PersistenceException.class) + public void whenLineItemsIsReassigned_thenThrowAnException() { + createOrderRequestWithLineItems(); + + OrderRequest orderRequest = entityManager.find(OrderRequest.class, 1L); + orderRequest.setLineItems(new ArrayList<>()); + + entityManager.getTransaction().begin(); + entityManager.merge(orderRequest); + entityManager.getTransaction().commit(); + } + private void createOrderRequestWithLineItems() { List lineItems = new ArrayList<>(); lineItems.add(new LineItem("line item 1"));