| /* |
| * Copyright (c) 2005, 2021 Oracle and/or its affiliates. All rights reserved. |
| * Copyright (c) 2005, 2015 SAP. All rights reserved. |
| * |
| * This program and the accompanying materials are made available under the |
| * terms of the Eclipse Public License v. 2.0 which is available at |
| * http://www.eclipse.org/legal/epl-2.0, |
| * or the Eclipse Distribution License v. 1.0 which is available at |
| * http://www.eclipse.org/org/documents/edl-v10.php. |
| * |
| * SPDX-License-Identifier: EPL-2.0 OR BSD-3-Clause |
| */ |
| |
| // Contributors: |
| // SAP - initial API and implementation |
| |
| package org.eclipse.persistence.testing.tests.wdf.jpa1.relation; |
| |
| import java.sql.Date; |
| import java.sql.SQLException; |
| import java.util.Collection; |
| import java.util.HashSet; |
| import java.util.Set; |
| |
| import jakarta.persistence.EntityManager; |
| |
| import org.eclipse.persistence.testing.framework.wdf.JPAEnvironment; |
| import org.eclipse.persistence.testing.models.wdf.jpa1.employee.Department; |
| import org.eclipse.persistence.testing.models.wdf.jpa1.employee.Employee; |
| import org.eclipse.persistence.testing.models.wdf.jpa1.employee.Patent; |
| import org.eclipse.persistence.testing.models.wdf.jpa1.employee.Project; |
| import org.eclipse.persistence.testing.models.wdf.jpa1.employee.Review; |
| import org.eclipse.persistence.testing.tests.wdf.jpa1.JPA1Base; |
| import org.junit.Test; |
| |
| @SuppressWarnings("unchecked") |
| public class TestMultipleRelationships extends JPA1Base { |
| private static final int HANS_ID_VALUE = 1; |
| private static final int FRED_ID_VALUE = 2; |
| private static final Integer HANS_ID = HANS_ID_VALUE; |
| private static final Project PUHLEN = new Project("G\u00fcrteltiere puhlen"); |
| private static final Project PINSELN = new Project("B\u00e4uche pinseln"); |
| private static final Project FALTEN = new Project("Zitronen falten"); |
| private static final Project ZAEHLEN = new Project("Erbsen z\u00e4hlen"); |
| private static final Project LINKEN = new Project("Eclipse linken"); |
| private static final Review PERFORMANCE = new Review(1, Date.valueOf("2005-10-07"), "performance"); |
| private static final Review PASSION = new Review(2, Date.valueOf("2005-10-08"), "passion"); |
| private static final Review PROFICIENCY = new Review(3, Date.valueOf("2005-10-09"), "proficiency"); |
| private static final Patent LIGHT_BULB = new Patent("light bulb", 1879, "artificial light source", java.sql.Date |
| .valueOf("1879-11-05")); |
| private static final Patent PHONOGRAPGH = new Patent("phonograph", 1877, "simple voice recorder", java.sql.Date |
| .valueOf("1877-01-13")); |
| private static final Patent ALTERNATING_CURRENT = new Patent("alternating current", 1888, "alternating current", Date |
| .valueOf("1888-03-17")); |
| private static final Patent HELICOPTER = new Patent("helicopter", 1922, "flying machine", Date.valueOf("1922-11-11")); // Etienne |
| |
| // Oehmichen |
| |
| private void seedDataModel() throws SQLException { |
| /* |
| * 5 Projects: |
| */ |
| clearAllTables(); // clear all tables; |
| JPAEnvironment env = getEnvironment(); |
| EntityManager em = env.getEntityManager(); |
| try { |
| env.beginTransaction(em); |
| Department dep = new Department(17, "diverses"); |
| em.persist(dep); |
| em.persist(PUHLEN); |
| em.persist(PINSELN); |
| em.persist(FALTEN); |
| em.persist(ZAEHLEN); |
| em.persist(LINKEN); |
| em.persist(LIGHT_BULB); |
| em.persist(PHONOGRAPGH); |
| em.persist(ALTERNATING_CURRENT); |
| em.persist(HELICOPTER); |
| em.persist(PERFORMANCE); |
| em.persist(PASSION); |
| em.persist(PROFICIENCY); |
| Employee hans = new Employee(HANS_ID_VALUE, "Hans", "Wurst", dep); |
| Set<Project> hansProjects = new HashSet<Project>(); |
| hansProjects.add(PUHLEN); |
| hansProjects.add(PINSELN); |
| hansProjects.add(FALTEN); |
| hans.setProjects(hansProjects); |
| hans.addReview(PERFORMANCE); |
| hans.addReview(PASSION); |
| Employee fred = new Employee(FRED_ID_VALUE, "Fred", "vom Jupiter", dep); |
| Set<Project> fredProjects = new HashSet<Project>(); |
| fredProjects.add(FALTEN); |
| fredProjects.add(ZAEHLEN); |
| fred.setProjects(fredProjects); |
| fred.addReview(PROFICIENCY); |
| Set<Patent> fredsPatents = new HashSet<Patent>(); |
| fredsPatents.add(LIGHT_BULB); |
| fredsPatents.add(PHONOGRAPGH); |
| fred.setPatents(fredsPatents); |
| Set<Patent> hansPatents = new HashSet<Patent>(); |
| hansPatents.add(PHONOGRAPGH); |
| hansPatents.add(ALTERNATING_CURRENT); |
| hans.setPatents(hansPatents); |
| em.persist(hans); |
| em.persist(fred); |
| env.commitTransactionAndClear(em); |
| } finally { |
| closeEntityManager(em); |
| } |
| } |
| |
| @Test |
| public void testCheckHans() throws SQLException { |
| seedDataModel(); // clear all tables; |
| JPAEnvironment env = getEnvironment(); |
| EntityManager em = env.getEntityManager(); |
| try { |
| env.beginTransaction(em); |
| Employee hans = em.find(Employee.class, HANS_ID); |
| Set<Review> reviews = hans.getReviews(); |
| verify(reviews != null, "Hans has no reviews"); |
| verify(reviews.size() == 2, "Hans has wrong number of reviews"); |
| verify(reviews.contains(PASSION), "Hans has no passion!"); |
| verify(reviews.contains(PERFORMANCE), "Hans has no performance!"); |
| Set<Project> projects = hans.getProjects(); |
| verify(projects != null, "Hans has no projects"); |
| verify(projects.size() == 3, "Hans has wrong number of projects"); |
| verify(projects.contains(PUHLEN), "Hans misses project " + PUHLEN.getName()); |
| verify(projects.contains(PINSELN), "Hans misses project " + PINSELN.getName()); |
| verify(projects.contains(FALTEN), "Hans misses project " + FALTEN.getName()); |
| Collection<Patent> patents = hans.getPatents(); |
| verify(patents != null, "Hans has no patens"); |
| verify(patents.size() == 2, "Hans has wrong number of patents"); |
| verify(patents.contains(PHONOGRAPGH), "Hans misses patent " + PHONOGRAPGH.getId().getName()); |
| verify(patents.contains(ALTERNATING_CURRENT), "Hans misses patent " + ALTERNATING_CURRENT.getId().getName()); |
| env.rollbackTransactionAndClear(em); |
| } finally { |
| closeEntityManager(em); |
| } |
| } |
| |
| @Test |
| public void testDeletePatent() throws SQLException { |
| seedDataModel(); // clear all tables; |
| JPAEnvironment env = getEnvironment(); |
| EntityManager em = env.getEntityManager(); |
| try { |
| env.beginTransaction(em); |
| Employee hans = em.find(Employee.class, HANS_ID); |
| Collection<Patent> patents = hans.getPatents(); |
| patents.remove(PHONOGRAPGH); |
| env.commitTransactionAndClear(em); |
| env.beginTransaction(em); |
| hans = em.find(Employee.class, HANS_ID); |
| Set<Review> reviews = hans.getReviews(); |
| verify(reviews != null, "Hans has no reviews"); |
| verify(reviews.size() == 2, "Hans has wrong number of reviews"); |
| verify(reviews.contains(PASSION), "Hans has no passion!"); |
| verify(reviews.contains(PERFORMANCE), "Hans has no performance!"); |
| Set<Project> projects = hans.getProjects(); |
| verify(projects != null, "Hans has no projects"); |
| verify(projects.size() == 3, "Hans has wrong number of projects"); |
| verify(projects.contains(PUHLEN), "Hans misses project " + PUHLEN.getName()); |
| verify(projects.contains(PINSELN), "Hans misses project " + PINSELN.getName()); |
| verify(projects.contains(FALTEN), "Hans misses project " + FALTEN.getName()); |
| patents = hans.getPatents(); |
| verify(patents != null, "Hans has no patens"); |
| verify(patents.size() == 1, "Hans has wrong number of projects"); |
| verify(patents.contains(ALTERNATING_CURRENT), "Hans misses patent " + LIGHT_BULB.getId().getName()); |
| env.rollbackTransactionAndClear(em); |
| } finally { |
| closeEntityManager(em); |
| } |
| } |
| |
| @Test |
| public void testAddReview() throws SQLException { |
| seedDataModel(); // clear all tables; |
| JPAEnvironment env = getEnvironment(); |
| EntityManager em = env.getEntityManager(); |
| try { |
| env.beginTransaction(em); |
| Employee hans = em.find(Employee.class, HANS_ID); |
| hans.getReviews().add(PROFICIENCY); |
| env.commitTransactionAndClear(em); |
| env.beginTransaction(em); |
| hans = em.find(Employee.class, HANS_ID); |
| Set<Review> reviews = hans.getReviews(); |
| verify(reviews != null, "Hans has no reviews"); |
| verify(reviews.size() == 3, "Hans has wrong number of reviews"); |
| verify(reviews.contains(PASSION), "Hans has no passion!"); |
| verify(reviews.contains(PERFORMANCE), "Hans has no performance!"); |
| verify(reviews.contains(PROFICIENCY), "Hans has no performance!"); |
| Set<Project> projects = hans.getProjects(); |
| verify(projects != null, "Hans has no projects"); |
| verify(projects.size() == 3, "Hans has wrong number of projects"); |
| verify(projects.contains(PUHLEN), "Hans misses project " + PUHLEN.getName()); |
| verify(projects.contains(PINSELN), "Hans misses project " + PINSELN.getName()); |
| verify(projects.contains(FALTEN), "Hans misses project " + FALTEN.getName()); |
| Collection<Patent> patents = hans.getPatents(); |
| verify(patents != null, "Hans has no patens"); |
| verify(patents.size() == 2, "Hans has wrong number of patents"); |
| verify(patents.contains(PHONOGRAPGH), "Hans misses patent " + PHONOGRAPGH.getId().getName()); |
| verify(patents.contains(ALTERNATING_CURRENT), "Hans misses patent " + ALTERNATING_CURRENT.getId().getName()); |
| env.rollbackTransactionAndClear(em); |
| } finally { |
| closeEntityManager(em); |
| } |
| } |
| } |