| /* |
| * 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.inheritance; |
| |
| import java.sql.SQLException; |
| import java.util.HashSet; |
| import java.util.Iterator; |
| import java.util.Set; |
| |
| import jakarta.persistence.EntityManager; |
| import jakarta.persistence.Query; |
| |
| import org.eclipse.persistence.testing.framework.wdf.JPAEnvironment; |
| import org.eclipse.persistence.testing.models.wdf.jpa1.employee.Bicycle; |
| import org.eclipse.persistence.testing.models.wdf.jpa1.employee.Car; |
| import org.eclipse.persistence.testing.models.wdf.jpa1.employee.Employee; |
| import org.eclipse.persistence.testing.models.wdf.jpa1.employee.MotorVehicle; |
| import org.eclipse.persistence.testing.models.wdf.jpa1.employee.MountainBike; |
| import org.eclipse.persistence.testing.models.wdf.jpa1.employee.RoadBike; |
| import org.eclipse.persistence.testing.models.wdf.jpa1.employee.Truck; |
| import org.eclipse.persistence.testing.tests.wdf.jpa1.JPA1Base; |
| import org.junit.Test; |
| |
| public class RelationsTest extends JPA1Base { |
| |
| @Test |
| public void testEmployeeWithTruck() throws SQLException { |
| clearAllTables(); |
| JPAEnvironment env = getEnvironment(); |
| EntityManager em = env.getEntityManager(); |
| try { |
| Employee employee = new Employee(1234, "Mighty", "Mouse", null); |
| Truck truck = new Truck(); |
| truck.setBrand("Renault"); |
| truck.setColor("yellow"); |
| truck.setLicensePlateNumber("MA-US 1234"); |
| truck.setModel("Trafic"); |
| truck.setMaxLoad((short) 800); |
| truck.setDriver(employee); |
| employee.setMotorVehicle(truck); |
| env.beginTransaction(em); |
| em.persist(employee); |
| final Short id = truck.getId(); |
| env.commitTransaction(em); |
| employee = null; |
| em.clear(); |
| employee = em.find(Employee.class, 1234); |
| verify(employee != null, "employee not found"); |
| MotorVehicle motorVehicle = employee.getMotorVehicle(); |
| verify(motorVehicle != null, "no motor vehicle found"); |
| verify(motorVehicle.getClass() == Truck.class, "wrong class: " + motorVehicle.getClass()); |
| verify("yellow".equals(motorVehicle.getColor()), "wrong color: " + motorVehicle.getColor()); |
| verify(id.equals(motorVehicle.getId()), "wrong motor vehicle id: " + motorVehicle.getId()); |
| } finally { |
| closeEntityManager(em); |
| } |
| } |
| |
| @Test |
| public void testEmployeeWithBicycles() throws SQLException { |
| clearAllTables(); |
| JPAEnvironment env = getEnvironment(); |
| EntityManager em = env.getEntityManager(); |
| try { |
| Employee employee = new Employee(17, "Kuno", "Hurtig", null); |
| Set<Employee> riders = new HashSet<Employee>(); |
| riders.add(employee); |
| Set<Bicycle> bicycles = new HashSet<Bicycle>(); |
| Bicycle roadBike = new RoadBike(); |
| roadBike.setRiders(riders); |
| bicycles.add(roadBike); |
| MountainBike mountainBike = new MountainBike(); |
| mountainBike.setRiders(riders); |
| bicycles.add(mountainBike); |
| employee.setBicycles(bicycles); |
| env.beginTransaction(em); |
| em.persist(employee); |
| final Short roadBikeId = roadBike.getId(); |
| env.commitTransaction(em); |
| employee = null; |
| em.clear(); |
| employee = em.find(Employee.class, 17); |
| verify(employee != null, "employee not found"); |
| bicycles = employee.getBicycles(); |
| verify(bicycles != null, "bicycles is null"); |
| verify(bicycles.size() == 2, "wrong size"); |
| Iterator<Bicycle> iter = bicycles.iterator(); |
| Bicycle bike1 = iter.next(); |
| Bicycle bike2 = iter.next(); |
| verify(bike1.getClass() == RoadBike.class && bike2.getClass() == MountainBike.class |
| || bike1.getClass() == MountainBike.class && bike2.getClass() == RoadBike.class, |
| "bicyles have unexpected types: " + bike1.getClass().getName() + ", " + bike2.getClass().getName()); |
| em.clear(); |
| env.beginTransaction(em); |
| em.find(Bicycle.class, roadBikeId); |
| env.commitTransaction(em); |
| } finally { |
| closeEntityManager(em); |
| } |
| } |
| |
| @Test |
| public void testEnBlocLoading() throws SQLException { |
| clearAllTables(); |
| JPAEnvironment env = getEnvironment(); |
| EntityManager em = env.getEntityManager(); |
| try { |
| Employee e1 = new Employee(1, "Paul", "Weber", null); |
| Car car = new Car(); |
| car.setDriver(e1); |
| e1.setMotorVehicle(car); |
| |
| Employee e2 = new Employee(2, "Paul", "Breitner", null); |
| Truck truck = new Truck(); |
| truck.setDriver(e2); |
| e2.setMotorVehicle(truck); |
| |
| Employee e3 = new Employee(3, "Paulchen", "Panther", null); |
| MotorVehicle mv = new MotorVehicle(); |
| mv.setDriver(e3); |
| e3.setMotorVehicle(mv); |
| |
| env.beginTransaction(em); |
| em.persist(e1); |
| em.persist(e2); |
| em.persist(e3); |
| em.persist(car); |
| em.persist(truck); |
| em.persist(mv); |
| |
| env.commitTransactionAndClear(em); |
| |
| env.beginTransaction(em); |
| |
| Query query = em.createQuery("select mv from MotorVehicle mv"); |
| query.getResultList(); |
| |
| } finally { |
| closeEntityManager(em); |
| } |
| |
| } |
| } |