blob: 29b226a91960d730acfb30a90ab9abb81c85e288 [file] [log] [blame]
/*
* Copyright (c) 2011, 2021 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 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:
// Oracle - initial API and implementation from Oracle TopLink
package org.eclipse.persistence.testing.tests.unitofwork;
import org.eclipse.persistence.queries.ReadObjectQuery;
import org.eclipse.persistence.sessions.UnitOfWork;
import org.eclipse.persistence.testing.framework.AutoVerifyTestCase;
import org.eclipse.persistence.testing.models.employee.domain.Address;
import org.eclipse.persistence.testing.models.employee.domain.Employee;
import org.eclipse.persistence.testing.models.employee.domain.EmploymentPeriod;
public class BuildCloneFromRowOneToOneTest extends AutoVerifyTestCase {
public Employee emp;
public Employee manager;
public Address address;
/**
* MultipleUnitOfWorkTestCase constructor comment.
*/
public BuildCloneFromRowOneToOneTest() {
super();
}
public Address addressExample1() {
Address address = new org.eclipse.persistence.testing.models.employee.domain.Address();
address.setCity("Toronto");
address.setPostalCode("L5J2B5");
address.setProvince("ONT");
address.setStreet("1450 Acme Cr., suite 4");
address.setCountry("Canada");
return address;
}
public Employee createNewEmployeeObject() {
Employee employee = new org.eclipse.persistence.testing.models.employee.domain.Employee();
employee.setFirstName("Judy");
employee.setLastName("Barney");
employee.setFemale();
employee.setSalary(35000);
employee.setPeriod(employmentPeriodExample());
return employee;
}
public Employee createNewManagerObject() {
Employee employee = new org.eclipse.persistence.testing.models.employee.domain.Employee();
employee.setFirstName("Markus" + System.currentTimeMillis());
employee.setLastName("Markson");
employee.setMale();
employee.setSalary(35000);
employee.setPeriod(employmentPeriodExample());
return employee;
}
public EmploymentPeriod employmentPeriodExample() {
EmploymentPeriod employmentPeriod = new org.eclipse.persistence.testing.models.employee.domain.EmploymentPeriod();
employmentPeriod.setEndDate(org.eclipse.persistence.internal.helper.Helper.dateFromYearMonthDate(1996, 0, 1));
employmentPeriod.setStartDate(org.eclipse.persistence.internal.helper.Helper.dateFromYearMonthDate(1993, 0, 1));
return employmentPeriod;
}
@Override
public void reset() {
if(getAbstractSession().isInTransaction()) {
getAbstractSession().rollbackTransaction();
}
getSession().getIdentityMapAccessor().initializeAllIdentityMaps();
}
@Override
public void setup() {
getAbstractSession().beginTransaction();
}
@Override
public void test() throws Exception {
UnitOfWork uow = getSession().acquireUnitOfWork();
this.emp = (Employee) uow.registerObject(createNewEmployeeObject());
this.manager = (Employee) uow.registerObject(createNewManagerObject());
this.manager.setAddress((Address) uow.registerObject(addressExample1()));
uow.commit();
uow = getSession().acquireUnitOfWork();
Employee cloneEmp = (Employee) uow.readObject(this.emp);
ReadObjectQuery roq = new ReadObjectQuery(Employee.class);
roq.setSelectionCriteria(roq.getExpressionBuilder().get("firstName").equal(this.manager.getFirstName()));
Employee cloneManager = (Employee)uow.executeQuery(roq);
cloneEmp.setManager(cloneManager);
cloneManager.addManagedEmployee(cloneManager);
uow.commit(); // this regression will cause exception here.
}
@Override
public void verify() {
}
}