/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.openjpa.persistence.enhance.identity;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.persistence.EntityManager;
import javax.persistence.EntityTransaction;
import javax.persistence.Query;
import org.apache.openjpa.persistence.test.SingleEMFTestCase;
public class TestMapsIdXml extends SingleEMFTestCase {
public int numEmployees = 4;
public int numDependentsPerEmployee = 2;
public int numPersons = 4;
public Map<Integer, Employee1Xml> emps1xml = new HashMap<Integer, Employee1Xml>();
public Map<String, Dependent1Xml> deps1xml = new HashMap<String, Dependent1Xml>();
public int eId1 = 1;
public int dId1 = 1;
public void setUp() throws Exception {
super.setUp(CLEAR_TABLES);
}
@Override
protected String getPersistenceUnitName() {
return "mapsId-pu";
}
/**
* This is spec 2.4.1.2 Example 1, case(b)
*/
public void testMapsId1Xml() {
createObj1Xml();
findObj1Xml();
queryObj1Xml();
}
public void createObj1Xml() {
EntityManager em = emf.createEntityManager();
EntityTransaction tran = em.getTransaction();
for (int i = 0; i < numEmployees; i++)
createEmployee1Xml(em, eId1++);
tran.begin();
em.flush();
tran.commit();
em.close();
}
public Employee1Xml createEmployee1Xml(EntityManager em, int id) {
Employee1Xml e = new Employee1Xml();
e.setEmpId(id);
e.setName("emp_" + id);
for (int i = 0; i < numDependentsPerEmployee; i++) {
Dependent1Xml d = createDependent1Xml(em, dId1++, e);
e.addDependent(d);
em.persist(d);
}
em.persist(e);
emps1xml.put(id, e);
return e;
}
public Dependent1Xml createDependent1Xml(EntityManager em, int id, Employee1Xml e) {
Dependent1Xml d = new Dependent1Xml();
DependentId1Xml did = new DependentId1Xml();
did.setName("dep_" + id);
d.setId(did);
d.setEmp(e);
deps1xml.put(did.getName(), d);
return d;
}
public void findObj1Xml() {
EntityManager em = emf.createEntityManager();
Employee1Xml e = em.find(Employee1Xml.class, 1);
List<Dependent1Xml> ds = e.getDependents();
assertEquals(numDependentsPerEmployee, ds.size());
Employee1Xml e0 = emps1xml.get(1);
assertEquals(e0, e);
em.close();
}
public void queryObj1Xml() {
queryDependent1Xml();
}
public void queryDependent1Xml() {
EntityManager em = emf.createEntityManager();
EntityTransaction tran = em.getTransaction();
tran.begin();
String jpql = "select d from Dependent1Xml d where d.id.name = 'dep_1' "
+ "AND d.emp.name = 'emp_1'";
Query q = em.createQuery(jpql);
List<Dependent1Xml> ds = q.getResultList();
for (Dependent1Xml d : ds) {
assertDependent1Xml(d);
}
tran.commit();
em.close();
}
public void assertDependent1Xml(Dependent1Xml d) {
DependentId1Xml id = d.getId();
Dependent1Xml d0 = deps1xml.get(id.getName());
if (d0.id.empPK == 0)
d0.id.empPK = d0.emp.getEmpId();
assertEquals(d0, d);
}
}