/******************************************************************************* * Copyright (c) 1998, 2015 Oracle and/or its affiliates. All rights reserved. * This program and the accompanying materials are made available under the * terms of the Eclipse Public License v1.0 and Eclipse Distribution License v. 1.0 * which accompanies this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. * * Contributors: * 04/02/2008-1.0M6 Guy Pelletier * - 224155: embeddable-attributes should be extended in the EclipseLink ORM.XML schema * 08/27/2008-1.1 Guy Pelletier * - 211329: Add sequencing on non-id attribute(s) support to the EclipseLink-ORM.XML Schema ******************************************************************************/ package org.eclipse.persistence.testing.tests.jpa.xml.complexaggregate; import javax.persistence.EntityManager; import junit.framework.*; import org.eclipse.persistence.sessions.DatabaseSession; import org.eclipse.persistence.testing.framework.junit.JUnitTestCase; import org.eclipse.persistence.testing.models.jpa.xml.complexaggregate.CitySlicker; import org.eclipse.persistence.testing.models.jpa.xml.complexaggregate.ComplexAggregateTableCreator; import org.eclipse.persistence.testing.models.jpa.xml.complexaggregate.CountryDweller; import org.eclipse.persistence.testing.models.jpa.xml.complexaggregate.HockeyPlayer; import org.eclipse.persistence.testing.models.jpa.xml.complexaggregate.HockeyTeam; import org.eclipse.persistence.testing.models.jpa.xml.complexaggregate.HockeyTeamDetails; import org.eclipse.persistence.testing.models.jpa.xml.complexaggregate.HockeyTeamId; import org.eclipse.persistence.testing.models.jpa.xml.complexaggregate.Name; import org.eclipse.persistence.testing.models.jpa.xml.complexaggregate.PersonalVitals; import org.eclipse.persistence.testing.models.jpa.xml.complexaggregate.Role; import org.eclipse.persistence.testing.models.jpa.xml.complexaggregate.TeamVitals; import org.eclipse.persistence.testing.models.jpa.xml.complexaggregate.Vitals; import org.eclipse.persistence.testing.tests.jpa.TestingProperties; /** * The mapping file for this test model is located here: * resource/eclipselinkorm/eclipselink-xml-extended-model/complexaggregate-extended-entity-mappings */ public class EntityMappingsComplexAggregateJUnitTestCase extends JUnitTestCase { private static HockeyTeamId[] teamIDs = new HockeyTeamId[3]; private String m_persistenceUnit; public EntityMappingsComplexAggregateJUnitTestCase() { super(); } public EntityMappingsComplexAggregateJUnitTestCase(String name) { super(name); } public EntityMappingsComplexAggregateJUnitTestCase(String name, String persistenceUnit) { super(name); m_persistenceUnit = persistenceUnit; } public static Test suite() { String ormTesting = TestingProperties.getProperty(TestingProperties.ORM_TESTING, TestingProperties.JPA_ORM_TESTING); final String persistenceUnit = ormTesting.equals(TestingProperties.JPA_ORM_TESTING)? "default" : "extended-complex-aggregate"; TestSuite suite = new TestSuite("Complex Aggregate Model - " + persistenceUnit); if (persistenceUnit.equals("extended-complex-aggregate")) { suite.addTest(new EntityMappingsComplexAggregateJUnitTestCase("testSetup", persistenceUnit)); suite.addTest(new EntityMappingsComplexAggregateJUnitTestCase("testCreateExtendedObjects", persistenceUnit)); suite.addTest(new EntityMappingsComplexAggregateJUnitTestCase("testVerifyExtendedObjects", persistenceUnit)); suite.addTest(new EntityMappingsComplexAggregateJUnitTestCase("testAutoGenerationOnEmbeddedId", persistenceUnit)); } return suite; } /** * The setup is done as a test, both to record its failure, and to allow execution in the server. */ public void testSetup() { DatabaseSession session = JUnitTestCase.getServerSession(m_persistenceUnit); new ComplexAggregateTableCreator().replaceTables(session); clearCache(m_persistenceUnit); } public void setUp () { super.setUp(); clearCache(m_persistenceUnit); } public void testCreateExtendedObjects() { //////// Team 1 //////// HockeyTeam team1 = new HockeyTeam("Axemen"); HockeyTeamDetails team1Details = new HockeyTeamDetails(); team1Details.setAwayColor("Red"); team1Details.setHomeColor("White"); team1Details.setLevel("Division 5"); team1.setTeamDetails(team1Details); //////// Team 2 //////// HockeyTeam team2 = new HockeyTeam("Cartier Partners"); HockeyTeamDetails team2Details = new HockeyTeamDetails(); team2Details.setAwayColor("Black"); team2Details.setHomeColor("White"); team2Details.setLevel("Division 2"); team2.setTeamDetails(team2Details); //////// Team 3 //////// HockeyTeam team3 = new HockeyTeam("Dead Last"); HockeyTeamDetails team3Details = new HockeyTeamDetails(); team3Details.setAwayColor("Blue"); team3Details.setHomeColor("White"); team3Details.setLevel("Division 4"); team3.setTeamDetails(team3Details); //////// Player 1 //////// HockeyPlayer player1 = new HockeyPlayer(); player1.setFirstName("Guy"); player1.setLastName("Pelletier"); PersonalVitals personalVitals1 = new PersonalVitals(); personalVitals1.setAge(29); personalVitals1.setHeight(1.80); personalVitals1.setWeight(180); TeamVitals teamVitals1 = new TeamVitals(); teamVitals1.setHockeyTeam(team2); team2.getPlayers().add(player1); teamVitals1.setJerseyNumber(20); teamVitals1.setPosition("Goalie"); teamVitals1.getRoles().add(new Role("Stop pucks!")); Vitals vitals1 = new Vitals(); vitals1.setPersonalVitals(personalVitals1); vitals1.setTeamVitals(teamVitals1); player1.setVitals(vitals1); //////// Player 2 //////// HockeyPlayer player2 = new HockeyPlayer(); player2.setFirstName("Dave"); player2.setLastName("McCann"); PersonalVitals personalVitals2 = new PersonalVitals(); personalVitals2.setAge(35); personalVitals2.setHeight(1.77); personalVitals2.setWeight(165); TeamVitals teamVitals2 = new TeamVitals(); teamVitals2.setHockeyTeam(team1); team1.getPlayers().add(player2); teamVitals2.setJerseyNumber(70); teamVitals2.setPosition("Left wing"); teamVitals2.getRoles().add(new Role("Power play unit")); teamVitals2.getRoles().add(new Role("Face-off specialist")); Vitals vitals2 = new Vitals(); vitals2.setPersonalVitals(personalVitals2); vitals2.setTeamVitals(teamVitals2); player2.setVitals(vitals2); //////// Player 3 //////// HockeyPlayer player3 = new HockeyPlayer(); player3.setFirstName("Tom"); player3.setLastName("Ware"); PersonalVitals personalVitals3 = new PersonalVitals(); personalVitals3.setAge(30); personalVitals3.setHeight(1.83); personalVitals3.setWeight(200); TeamVitals teamVitals3 = new TeamVitals(); teamVitals3.setHockeyTeam(team1); team1.getPlayers().add(player3); teamVitals3.setJerseyNumber(12); teamVitals3.setPosition("Defence"); teamVitals3.getRoles().add(new Role("Penalty kill unit")); Vitals vitals3 = new Vitals(); vitals3.setPersonalVitals(personalVitals3); vitals3.setTeamVitals(teamVitals3); player3.setVitals(vitals3); //////// Player 4 //////// HockeyPlayer player4 = new HockeyPlayer(); player4.setFirstName("George"); player4.setLastName("Robinson"); PersonalVitals personalVitals4 = new PersonalVitals(); personalVitals4.setAge(32); personalVitals4.setHeight(1.86); personalVitals4.setWeight(210); TeamVitals teamVitals4 = new TeamVitals(); teamVitals4.setHockeyTeam(team3); team3.getPlayers().add(player4); teamVitals4.setJerseyNumber(6); teamVitals4.setPosition("Center"); teamVitals4.getRoles().add(new Role("Power play unit")); teamVitals4.getRoles().add(new Role("Goon")); Vitals vitals4 = new Vitals(); vitals4.setPersonalVitals(personalVitals4); vitals4.setTeamVitals(teamVitals4); player4.setVitals(vitals4); //////// Player 5 //////// HockeyPlayer player5 = new HockeyPlayer(); player5.setFirstName("Andrew"); player5.setLastName("Glennie"); PersonalVitals personalVitals5 = new PersonalVitals(); personalVitals5.setAge(31); personalVitals5.setHeight(1.80); personalVitals5.setWeight(205); TeamVitals teamVitals5 = new TeamVitals(); teamVitals5.setHockeyTeam(team3); team3.getPlayers().add(player5); teamVitals5.setJerseyNumber(7); teamVitals5.setPosition("Right wing"); Vitals vitals5 = new Vitals(); vitals5.setPersonalVitals(personalVitals5); vitals5.setTeamVitals(teamVitals5); player5.setVitals(vitals5); //////// Player 6 //////// HockeyPlayer player6 = new HockeyPlayer(); player6.setFirstName("David"); player6.setLastName("Whittaker"); PersonalVitals personalVitals6 = new PersonalVitals(); personalVitals6.setAge(32); personalVitals6.setHeight(1.83); personalVitals6.setWeight(190); TeamVitals teamVitals6 = new TeamVitals(); teamVitals6.setHockeyTeam(team2); team2.getPlayers().add(player6); teamVitals6.setJerseyNumber(17); teamVitals6.setPosition("Defence"); Vitals vitals6 = new Vitals(); vitals6.setPersonalVitals(personalVitals6); vitals6.setTeamVitals(teamVitals6); player6.setVitals(vitals6); //////// Commit the new objects //////// EntityManager em = createEntityManager(m_persistenceUnit); try { beginTransaction(em); em.persist(team1); teamIDs[0] = team1.getId(); em.persist(team2); teamIDs[1] = team2.getId(); em.persist(team3); teamIDs[2] = team3.getId(); em.persist(player1); em.persist(player2); em.persist(player3); em.persist(player4); em.persist(player5); em.persist(player6); commitTransaction(em); } catch (RuntimeException e) { if (isTransactionActive(em)){ rollbackTransaction(em); } closeEntityManager(em); throw e; } closeEntityManager(em); } public void testVerifyExtendedObjects() { // Check the cache for the objects checkTeam(teamIDs[0]); checkTeam(teamIDs[1]); checkTeam(teamIDs[2]); // Clear the cache to ensure the objects were persisted. clearCache(m_persistenceUnit); checkTeam(teamIDs[0]); checkTeam(teamIDs[1]); checkTeam(teamIDs[2]); } private void checkTeam(HockeyTeamId id) { EntityManager em = createEntityManager(m_persistenceUnit); HockeyTeam team = em.find(HockeyTeam.class, id); assertFalse("Hockey team with ID: " + id + ", was not created.", team == null); assertTrue("Hockey team with ID: " + id + ", did not have 2 players added.", team.getPlayers().size() == 2); } public void testAutoGenerationOnEmbeddedId() { EntityManager em = createEntityManager(m_persistenceUnit); try { Name name1 = new Name(); name1.setFirstName("Tom"); name1.setLastName("Ware"); CountryDweller countryDweller = new CountryDweller(); countryDweller.setAge(30); countryDweller.setName(name1); CitySlicker citySlicker = new CitySlicker(); citySlicker.setAge(53); // Bug 300696 - Invalid tests: sharing embedded objects is not allowed // Changed the test to use clone instead of sharing the same Name between the two Entities. Name name1Clone = (Name)name1.clone(); citySlicker.setName(name1Clone); Name name2 = new Name(); name2.setFirstName("Guy"); name2.setLastName("Pelletier"); CountryDweller countryDweller2 = new CountryDweller(); countryDweller2.setAge(65); countryDweller2.setName(name2); beginTransaction(em); em.persist(countryDweller); em.persist(countryDweller2); em.persist(citySlicker); commitTransaction(em); // Clear the cache. clearCache(m_persistenceUnit); // Now read them back in and delete them. beginTransaction(em); // Note that in Identity case name1Clone may no longer have the same id as name1 CitySlicker cs = em.find(CitySlicker.class, name1Clone); CountryDweller cd = em.merge(countryDweller); CountryDweller cd2 = em.merge(countryDweller2); em.remove(cs); em.remove(cd); em.remove(cd2); commitTransaction(em); } catch (RuntimeException e) { if (isTransactionActive(em)){ rollbackTransaction(em); } closeEntityManager(em); throw e; } closeEntityManager(em); } }