blob: 434f5b227bba3931c50ec5960ee06a64545248d6 [file] [log] [blame]
/*
* 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);
}
}
}