BAEL-4643: JPA CascadeType.REMOVE vs orphanRemoval
* Defines the Domain: ShipmentInfo, LineItem and OrderRequest entity * Adds CascadeTypeRemoveIntegrationTest * Adds OrphanRemovalIntegrationTest
This commit is contained in:
+72
@@ -0,0 +1,72 @@
|
||||
package com.baeldung.jpa.removal;
|
||||
|
||||
import java.util.List;
|
||||
import javax.persistence.EntityManager;
|
||||
import javax.persistence.EntityManagerFactory;
|
||||
import javax.persistence.Persistence;
|
||||
import javax.persistence.TypedQuery;
|
||||
import javax.persistence.criteria.CriteriaBuilder;
|
||||
import javax.persistence.criteria.CriteriaQuery;
|
||||
import javax.persistence.criteria.Root;
|
||||
import org.junit.Assert;
|
||||
import org.junit.BeforeClass;
|
||||
import org.junit.Test;
|
||||
|
||||
public class CascadeTypeRemoveIntegrationTest {
|
||||
|
||||
private static EntityManagerFactory factory;
|
||||
private static EntityManager entityManager;
|
||||
|
||||
@BeforeClass
|
||||
public static void setup() {
|
||||
factory = Persistence.createEntityManagerFactory("jpa-h2-removal");
|
||||
entityManager = factory.createEntityManager();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void whenOrderRequestIsDeleted_thenDeleteShipmentInfo() {
|
||||
createOrderRequestWithShipmentInfo();
|
||||
|
||||
OrderRequest orderRequest = entityManager.find(OrderRequest.class, 1L);
|
||||
|
||||
entityManager.getTransaction().begin();
|
||||
entityManager.remove(orderRequest);
|
||||
entityManager.getTransaction().commit();
|
||||
|
||||
Assert.assertEquals(0, findAllOrderRequest().size());
|
||||
Assert.assertEquals(0, findAllShipmentInfo().size());
|
||||
}
|
||||
|
||||
private void createOrderRequestWithShipmentInfo() {
|
||||
ShipmentInfo shipmentInfo = new ShipmentInfo("name");
|
||||
OrderRequest orderRequest = new OrderRequest(shipmentInfo);
|
||||
|
||||
entityManager.getTransaction().begin();
|
||||
entityManager.persist(orderRequest);
|
||||
entityManager.getTransaction().commit();
|
||||
|
||||
Assert.assertEquals(1, findAllOrderRequest().size());
|
||||
Assert.assertEquals(1, findAllShipmentInfo().size());
|
||||
}
|
||||
|
||||
private List<OrderRequest> findAllOrderRequest() {
|
||||
CriteriaBuilder cb = entityManager.getCriteriaBuilder();
|
||||
CriteriaQuery<OrderRequest> cq = cb.createQuery(OrderRequest.class);
|
||||
Root<OrderRequest> root = cq.from(OrderRequest.class);
|
||||
CriteriaQuery<OrderRequest> findAll = cq.select(root);
|
||||
TypedQuery<OrderRequest> findAllQuery = entityManager.createQuery(findAll);
|
||||
|
||||
return findAllQuery.getResultList();
|
||||
}
|
||||
|
||||
private List<ShipmentInfo> findAllShipmentInfo() {
|
||||
CriteriaBuilder cb = entityManager.getCriteriaBuilder();
|
||||
CriteriaQuery<ShipmentInfo> cq = cb.createQuery(ShipmentInfo.class);
|
||||
Root<ShipmentInfo> root = cq.from(ShipmentInfo.class);
|
||||
CriteriaQuery<ShipmentInfo> findAll = cq.select(root);
|
||||
TypedQuery<ShipmentInfo> findAllQuery = entityManager.createQuery(findAll);
|
||||
|
||||
return findAllQuery.getResultList();
|
||||
}
|
||||
|
||||
}
|
||||
+78
@@ -0,0 +1,78 @@
|
||||
package com.baeldung.jpa.removal;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import javax.persistence.EntityManager;
|
||||
import javax.persistence.EntityManagerFactory;
|
||||
import javax.persistence.Persistence;
|
||||
import javax.persistence.TypedQuery;
|
||||
import javax.persistence.criteria.CriteriaBuilder;
|
||||
import javax.persistence.criteria.CriteriaQuery;
|
||||
import javax.persistence.criteria.Root;
|
||||
import org.junit.Assert;
|
||||
import org.junit.BeforeClass;
|
||||
import org.junit.Test;
|
||||
|
||||
public class OrphanRemovalIntegrationTest {
|
||||
|
||||
private static EntityManagerFactory factory;
|
||||
private static EntityManager entityManager;
|
||||
|
||||
@BeforeClass
|
||||
public static void setup() {
|
||||
factory = Persistence.createEntityManagerFactory("jpa-h2-removal");
|
||||
entityManager = factory.createEntityManager();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void whenLineItemIsRemovedFromOrderRequest_thenDeleteOrphanedLineItem() {
|
||||
createOrderRequestWithLineItems();
|
||||
|
||||
OrderRequest orderRequest = entityManager.find(OrderRequest.class, 1L);
|
||||
LineItem lineItem = entityManager.find(LineItem.class, 2L);
|
||||
orderRequest.removeLineItem(lineItem);
|
||||
|
||||
entityManager.getTransaction().begin();
|
||||
entityManager.merge(orderRequest);
|
||||
entityManager.getTransaction().commit();
|
||||
|
||||
Assert.assertEquals(1, findAllOrderRequest().size());
|
||||
Assert.assertEquals(2, findAllLineItem().size());
|
||||
}
|
||||
|
||||
private void createOrderRequestWithLineItems() {
|
||||
List<LineItem> lineItems = new ArrayList<>();
|
||||
lineItems.add(new LineItem("line item 1"));
|
||||
lineItems.add(new LineItem("line item 2"));
|
||||
lineItems.add(new LineItem("line item 3"));
|
||||
|
||||
OrderRequest orderRequest = new OrderRequest(lineItems);
|
||||
|
||||
entityManager.getTransaction().begin();
|
||||
entityManager.persist(orderRequest);
|
||||
entityManager.getTransaction().commit();
|
||||
|
||||
Assert.assertEquals(1, findAllOrderRequest().size());
|
||||
Assert.assertEquals(3, findAllLineItem().size());
|
||||
}
|
||||
|
||||
private List<OrderRequest> findAllOrderRequest() {
|
||||
CriteriaBuilder cb = entityManager.getCriteriaBuilder();
|
||||
CriteriaQuery<OrderRequest> cq = cb.createQuery(OrderRequest.class);
|
||||
Root<OrderRequest> root = cq.from(OrderRequest.class);
|
||||
CriteriaQuery<OrderRequest> findAll = cq.select(root);
|
||||
TypedQuery<OrderRequest> findAllQuery = entityManager.createQuery(findAll);
|
||||
|
||||
return findAllQuery.getResultList();
|
||||
}
|
||||
|
||||
private List<LineItem> findAllLineItem() {
|
||||
CriteriaBuilder cb = entityManager.getCriteriaBuilder();
|
||||
CriteriaQuery<LineItem> cq = cb.createQuery(LineItem.class);
|
||||
Root<LineItem> root = cq.from(LineItem.class);
|
||||
CriteriaQuery<LineItem> findAll = cq.select(root);
|
||||
TypedQuery<LineItem> findAllQuery = entityManager.createQuery(findAll);
|
||||
|
||||
return findAllQuery.getResultList();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user