/******************************************************************************* | |
* Copyright (c) 2005, 2009 SAP. 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: | |
* SAP - initial API and implementation | |
******************************************************************************/ | |
package org.eclipse.persistence.testing.tests.wdf.jpa1.relation; | |
import java.sql.SQLException; | |
import javax.persistence.EntityManager; | |
import org.eclipse.persistence.testing.framework.wdf.JPAEnvironment; | |
import org.eclipse.persistence.testing.models.wdf.jpa1.employee.Cubicle; | |
import org.eclipse.persistence.testing.models.wdf.jpa1.employee.CubiclePrimaryKeyClass; | |
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.tests.wdf.jpa1.JPA1Base; | |
import org.junit.Before; | |
import org.junit.Test; | |
public class TestBidirectionalOneToOne extends JPA1Base { | |
private static final int HANS_ID_VALUE = 1; | |
private static final int FRED_ID_VALUE = 2; | |
private static final Integer HANS_ID = new Integer(HANS_ID_VALUE); | |
private static final Integer FRED_ID = new Integer(FRED_ID_VALUE); | |
private static final CubiclePrimaryKeyClass GREEN_CUBICLE_ID = new CubiclePrimaryKeyClass(new Integer(10), new Integer(20)); | |
private static final CubiclePrimaryKeyClass BLUE_CUBICLE_ID = new CubiclePrimaryKeyClass(new Integer(33), new Integer(44)); | |
@Before | |
public void seedDataModel() throws SQLException { | |
/* | |
* 5 Projects: | |
*/ | |
clearAllTables(); // clear all tables; | |
JPAEnvironment env = getEnvironment(); | |
EntityManager em = env.getEntityManager(); | |
env.evictAll(em); | |
try { | |
env.beginTransaction(em); | |
Department dep = new Department(17, "diverses"); | |
Employee hans = new Employee(HANS_ID_VALUE, "Hans", "Wurst", dep); | |
Employee fred = new Employee(FRED_ID_VALUE, "Fred", "vom Jupiter", dep); | |
Cubicle green = new Cubicle(GREEN_CUBICLE_ID, "green", hans); | |
hans.setCubicle(green); | |
Cubicle blue = new Cubicle(BLUE_CUBICLE_ID, "blue", null); | |
em.persist(dep); | |
em.persist(hans); | |
em.persist(fred); | |
em.persist(green); | |
em.persist(blue); | |
env.commitTransactionAndClear(em); | |
} finally { | |
env.evictAll(em); | |
closeEntityManager(em); | |
} | |
} | |
@Test | |
public void testUnchanged() { | |
JPAEnvironment env = getEnvironment(); | |
EntityManager em = env.getEntityManager(); | |
try { | |
// 1. do nothing | |
env.beginTransaction(em); | |
Employee emp = em.find(Employee.class, HANS_ID); | |
// do nothing | |
emp.clearPostUpdate(); | |
env.commitTransactionAndClear(em); | |
verify(!emp.postUpdateWasCalled(), "postUpdate was called"); | |
// 2. touch the cubicle | |
env.beginTransaction(em); | |
emp = em.find(Employee.class, HANS_ID); | |
emp.getCubicle().getColor(); | |
emp.clearPostUpdate(); | |
env.commitTransactionAndClear(em); | |
verify(!emp.postUpdateWasCalled(), "postUpdate was called"); | |
// 3. trivial update | |
env.beginTransaction(em); | |
emp = em.find(Employee.class, HANS_ID); | |
Cubicle cubicle = emp.getCubicle(); | |
emp.setCubicle(cubicle); | |
emp.clearPostUpdate(); | |
env.commitTransactionAndClear(em); | |
verify(!emp.postUpdateWasCalled(), "postUpdate was called"); | |
} finally { | |
closeEntityManager(em); | |
} | |
} | |
@Test | |
public void testMoveCubicle() { | |
JPAEnvironment env = getEnvironment(); | |
EntityManager em = env.getEntityManager(); | |
try { | |
env.beginTransaction(em); | |
Employee hans = em.find(Employee.class, HANS_ID); | |
Employee fred = em.find(Employee.class, FRED_ID); | |
verify(hans != null, "employee not found"); | |
verify(fred != null, "employee not found"); | |
Cubicle fredsCubicle = fred.getCubicle(); | |
Cubicle hansCubicle = hans.getCubicle(); | |
fred.setCubicle(hansCubicle); | |
hans.setCubicle(null); | |
hansCubicle.setEmployee(fred); | |
verify(fredsCubicle == null, "Freds cubicle is not null"); | |
env.commitTransactionAndClear(em); | |
hans = em.find(Employee.class, HANS_ID); | |
verify(hans != null, "Hans is null"); | |
verify(hans.getCubicle() == null, "Hans' cubicle is not null"); | |
fred = em.find(Employee.class, FRED_ID); | |
verify(fred != null, "Fred is null"); | |
fredsCubicle = fred.getCubicle(); | |
verify(fredsCubicle != null, "Freds cubicle is null"); | |
verify(fredsCubicle.getId().equals(GREEN_CUBICLE_ID), "Freds cubicle has wrong id"); | |
Employee fredsCubiclesEmployee = fredsCubicle.getEmployee(); | |
verify(fredsCubiclesEmployee != null, "The employee of Freds cubicle is null"); | |
verify(fredsCubiclesEmployee.getId() == FRED_ID_VALUE, "The id of the employee of Freds cubicle is wrong"); | |
Cubicle blueCubicle = em.find(Cubicle.class, BLUE_CUBICLE_ID); | |
verify(blueCubicle != null, "blue cubicle not found"); | |
verify(blueCubicle.getEmployee() == null, "The employee of the blue cubicle is not null"); | |
} finally { | |
closeEntityManager(em); | |
} | |
} | |
} |