You are viewing a plain text version of this content. The canonical link for it is here.
Posted to ojb-dev@db.apache.org by br...@apache.org on 2005/05/22 18:06:38 UTC
cvs commit: db-ojb/src/test/org/apache/ojb/broker InheritanceMultipleTableTest.java
brj 2005/05/22 09:06:38
Modified: src/test/org/apache/ojb/broker
InheritanceMultipleTableTest.java
Log:
new testcase for outer join hint (this one fails)
Revision Changes Path
1.13 +977 -919 db-ojb/src/test/org/apache/ojb/broker/InheritanceMultipleTableTest.java
Index: InheritanceMultipleTableTest.java
===================================================================
RCS file: /home/cvs/db-ojb/src/test/org/apache/ojb/broker/InheritanceMultipleTableTest.java,v
retrieving revision 1.12
retrieving revision 1.13
diff -u -r1.12 -r1.13
--- InheritanceMultipleTableTest.java 18 Dec 2004 14:01:16 -0000 1.12
+++ InheritanceMultipleTableTest.java 22 May 2005 16:06:38 -0000 1.13
@@ -1,919 +1,977 @@
-package org.apache.ojb.broker;
-
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Iterator;
-import java.util.List;
-
-import org.apache.commons.lang.SerializationUtils;
-import org.apache.commons.lang.builder.EqualsBuilder;
-import org.apache.commons.lang.builder.ToStringBuilder;
-import org.apache.commons.lang.builder.ToStringStyle;
-import org.apache.ojb.broker.metadata.ClassDescriptor;
-import org.apache.ojb.broker.query.Criteria;
-import org.apache.ojb.broker.query.Query;
-import org.apache.ojb.broker.query.QueryFactory;
-import org.apache.ojb.junit.PBTestCase;
-
-/**
- * These tests check inheritance using multiple tables via 1:1 reference and "super" keyword in
- * reference descriptor. The test objects use a composite PK.
- * One autoincrement PK field - Integer. One non-autoincrement PK field with manually set PK- Long.
- *
- * @author <a href="mailto:arminw@apache.org">Armin Waibel</a>
- * @version $Id$
- */
-public class InheritanceMultipleTableTest extends PBTestCase
-{
- public static void main(String[] args)
- {
- junit.textui.TestRunner.main(new String[]{InheritanceMultipleTableTest.class.getName()});
- }
-
- public void setUp() throws Exception
- {
- super.setUp();
- // allow to batch statements
- broker.serviceConnectionManager().setBatchMode(true);
- }
-
- public void testInheritancedObjectsInCollectionReferences()
- {
- if(ojbSkipKnownIssueProblem("References of classes (1:1, 1:n) mapped to multiple joined tables only" +
- " return base class type instances"))
- {
- return;
- }
-
- long timestamp = System.currentTimeMillis();
- Long id_2 = new Long(timestamp);
- String name = "testInheritancedObjectsInCollectionReferences_" + timestamp;
- Manager m_1 = new Manager(id_2, name + "_manager_1");
- Manager m_2 = new Manager(id_2, name + "_manager_2");
- Manager m_3 = new Manager(id_2, name + "_manager_3");
- m_3.setDepartment("none");
- Executive ex_1 = new Executive(id_2, name + "_executive", "department_1", null);
- Executive ex_2 = new Executive(id_2, name + "_executive", "department_1", null);
- Employee em = new Employee(id_2, name + "_employee");
-
- ArrayList employees = new ArrayList();
- employees.add(m_1);
- employees.add(m_2);
- employees.add(m_3);
- employees.add(ex_1);
- employees.add(ex_2);
- employees.add(em);
-
- Company company = new Company(id_2, name, employees);
- broker.beginTransaction();
- broker.store(company);
- broker.commitTransaction();
-
- broker.clearCache();
- Criteria crit = new Criteria();
- crit.addEqualTo("id", id_2);
- Query query = QueryFactory.newQuery(Company.class, crit);
- Collection result = broker.getCollectionByQuery(query);
- assertEquals(1, result.size());
- Company newCompany = (Company) result.iterator().next();
- List newEmployees = newCompany.getEmployees();
- assertNotNull(newEmployees);
- assertEquals(employees.size(), newEmployees.size());
- int countEmployee = 0;
- int countExecutive = 0;
- int countManager = 0;
- for(int i = 0; i < newEmployees.size(); i++)
- {
- Object o = newEmployees.get(i);
- if(o instanceof Employee)
- {
- ++countEmployee;
- }
- if(o instanceof Executive)
- {
- ++countExecutive;
- }
- if(o instanceof Manager)
- {
- ++countManager;
- }
- }
- assertEquals(6, countEmployee);
- /*
- bug:
- expect that the real classes will be populated
- currently this does not happen, only objects of
- type Employee will be returned.
- */
- assertEquals(5, countExecutive);
- assertEquals(3, countManager);
- }
-
- public void testUpdate()
- {
- long timestamp = System.currentTimeMillis();
- Long id_2 = new Long(timestamp);
- String name = "testUpdate" + timestamp;
- Employee em1 = new Employee(id_2, "employee_" + name);
- Executive ex1 = new Executive(id_2, "executive_" + name, "department_1", null);
- Executive ex2 = new Executive(id_2, "executive_" + name, "department_2", null);
- ArrayList list = new ArrayList();
- list.add(ex1);
- list.add(ex2);
- Manager m1 = new Manager(id_2, "manager_" + name);
- m1.setExecutives(list);
-
- broker.beginTransaction();
- broker.store(em1);
- broker.store(m1);
- broker.commitTransaction();
-
- Identity m1_oid = new Identity(m1, broker);
- Identity ex1_oid = new Identity(ex1, broker);
- Identity em1_oid = new Identity(em1, broker);
-
- broker.clearCache();
-
- Employee newEm1 = (Employee) broker.getObjectByIdentity(em1_oid);
- Executive newEx1 = (Executive) broker.getObjectByIdentity(ex1_oid);
- Manager newM1 = (Manager) broker.getObjectByIdentity(m1_oid);
-
- assertEquals(2, newM1.getExecutives().size());
-
- newEm1.setName("**updated_" + name);
- newM1.setName("**updated_" + name);
- ((Executive) newM1.getExecutives().get(0)).setName("**updated_" + name);
-
- broker.beginTransaction();
- broker.store(newEm1);
- broker.store(newM1);
- broker.store(newEx1);
- broker.commitTransaction();
-
- broker.clearCache();
-
- em1 = (Employee) broker.getObjectByIdentity(em1_oid);
- ex1 = (Executive) broker.getObjectByIdentity(ex1_oid);
- m1 = (Manager) broker.getObjectByIdentity(m1_oid);
-
- assertEquals(newEm1, em1);
- assertEquals(newEx1, ex1);
- assertEquals(newM1, m1);
-
- assertEquals(2, m1.getExecutives().size());
- }
-
- public void testStoreUpdateQuerySerialized_2()
- {
- long timestamp = System.currentTimeMillis();
- Long id_2 = new Long(timestamp);
- String name = "testStoreUpdateQuerySerialized_" + timestamp;
- Manager m_1 = new Manager(id_2, name + "_manager_1");
- Manager m_2 = new Manager(id_2, name + "_manager_2");
- Manager m_3 = new Manager(id_2, name + "_manager_3");
- m_3.setDepartment("none");
-
- Executive ex_1 = new Executive(id_2, name + "_executive", "department_1", null);
- Executive ex_2 = new Executive(id_2, name + "_executive", "department_1", null);
-
- Employee em = new Employee(id_2, name + "_employee");
-
- broker.beginTransaction();
- broker.store(em);
- broker.store(m_1);
- broker.store(m_3);
- broker.store(ex_1);
- broker.store(m_2);
- broker.store(ex_2);
- broker.commitTransaction();
-
- broker.clearCache();
- Criteria crit = new Criteria();
- crit.addLike("name", name + "%");
- crit.addLike("department", "none");
- Query query = QueryFactory.newQuery(Manager.class, crit);
- Collection result = broker.getCollectionByQuery(query);
- assertEquals(1, result.size());
-
- crit = new Criteria();
- crit.addLike("name", name + "%");
- query = QueryFactory.newQuery(Employee.class, crit);
- result = broker.getCollectionByQuery(query);
- assertEquals(6, result.size());
-
- crit = new Criteria();
- crit.addLike("name", name + "%");
- query = QueryFactory.newQuery(Executive.class, crit);
- result = broker.getCollectionByQuery(query);
- assertEquals(5, result.size());
-
- crit = new Criteria();
- crit.addLike("name", name + "%");
- query = QueryFactory.newQuery(Manager.class, crit);
- result = broker.getCollectionByQuery(query);
- assertEquals(3, result.size());
-
- em = (Employee) SerializationUtils.clone(em);
- m_1 = (Manager) SerializationUtils.clone(m_1);
- m_2 = (Manager) SerializationUtils.clone(m_2);
- m_3 = (Manager) SerializationUtils.clone(m_3);
- ex_1 = (Executive) SerializationUtils.clone(ex_1);
- ex_2 = (Executive) SerializationUtils.clone(ex_2);
-
- em.setName(em.getName() + "_updated");
- m_1.setName(m_1.getName() + "_updated");
- m_1.setDepartment("_updated_Dep");
- m_2.setName(m_2.getName() + "_updated");
- m_3.setName(m_3.getName() + "_updated");
- ex_1.setName(ex_1.getName() + "_updated");
- ex_2.setName(ex_2.getName() + "_updated");
-
- broker.clearCache();
- broker.beginTransaction();
- //========================================
- // update only modified fields
- broker.update(em, new String[]{"name"});
- broker.update(m_1, new String[]{"name", "department"});
- broker.update(m_3, new String[]{"name"});
- broker.update(ex_1, new String[]{"name"});
- broker.update(m_2, new String[]{"name"});
- broker.update(ex_2, new String[]{"name"});
- //========================================
- broker.commitTransaction();
-
- /*
- after de/serialization and update we expect the same row count in
- each table
- */
- broker.clearCache();
-
- crit = new Criteria();
- crit.addLike("name", name + "%");
- crit.addLike("department", "_updated_Dep");
- query = QueryFactory.newQuery(Manager.class, crit);
- result = broker.getCollectionByQuery(query);
- assertEquals("Expect the same number of objects as before update", 1, result.size());
- Manager newMan = (Manager) result.iterator().next();
- assertEquals(m_1.getName(), newMan.getName());
- assertEquals(m_1.getDepartment(), newMan.getDepartment());
-
- crit = new Criteria();
- crit.addLike("name", name + "%");
- crit.addLike("department", "none");
- query = QueryFactory.newQuery(Manager.class, crit);
- result = broker.getCollectionByQuery(query);
- assertEquals("Expect the same number of objects as before update", 1, result.size());
-
- crit = new Criteria();
- crit.addLike("name", name + "%");
- query = QueryFactory.newQuery(Employee.class, crit);
- result = broker.getCollectionByQuery(query);
- assertEquals("Expect the same number of objects as before update", 6, result.size());
-
- crit = new Criteria();
- crit.addLike("name", name + "%");
- query = QueryFactory.newQuery(Executive.class, crit);
- result = broker.getCollectionByQuery(query);
- assertEquals("Expect the same number of objects as before update", 5, result.size());
-
- crit = new Criteria();
- crit.addLike("name", name + "%");
- query = QueryFactory.newQuery(Manager.class, crit);
- result = broker.getCollectionByQuery(query);
- assertEquals("Expect the same number of objects as before update", 3, result.size());
- }
-
- public void testObjectExistence()
- {
- Manager target_1 = new Manager(new Long(1), "testObjectExistence");
- Manager target_2 = new Manager(new Long(System.currentTimeMillis()), "testObjectExistence");
-
- Identity oid_1 = broker.serviceIdentity().buildIdentity(target_1);
- Identity oid_2 = broker.serviceIdentity().buildIdentity(target_2);
-
- ClassDescriptor cld = broker.getClassDescriptor(Manager.class);
-
- boolean b_1 = broker.serviceJdbcAccess().doesExist(cld, oid_1);
- boolean b_2 = broker.serviceJdbcAccess().doesExist(cld, oid_2);
- assertFalse(b_1);
- assertFalse(b_2);
- }
-
- public void testStoreUpdateQuerySerialized()
- {
- long timestamp = System.currentTimeMillis();
- Long id_2 = new Long(timestamp);
- String name = "testStoreUpdateQuerySerialized_" + timestamp;
- Manager m_1 = new Manager(id_2, name + "_manager_1");
- Manager m_2 = new Manager(id_2, name + "_manager_2");
- Manager m_3 = new Manager(id_2, name + "_manager_3");
- m_3.setDepartment("none");
-
- Executive ex_1 = new Executive(id_2, name + "_executive", "department_1", null);
- Executive ex_2 = new Executive(id_2, name + "_executive", "department_1", null);
-
- Employee em = new Employee(id_2, name + "_employee");
-
- broker.beginTransaction();
- broker.store(em);
- broker.store(m_1);
- broker.store(m_3);
- broker.store(ex_1);
- broker.store(m_2);
- broker.store(ex_2);
- broker.commitTransaction();
-
- broker.clearCache();
- Criteria crit = new Criteria();
- crit.addLike("name", name + "%");
- crit.addLike("department", "none");
- Query query = QueryFactory.newQuery(Manager.class, crit);
- Collection result = broker.getCollectionByQuery(query);
- assertEquals(1, result.size());
-
- crit = new Criteria();
- crit.addLike("name", name + "%");
- query = QueryFactory.newQuery(Employee.class, crit);
- result = broker.getCollectionByQuery(query);
- assertEquals(6, result.size());
-
- crit = new Criteria();
- crit.addLike("name", name + "%");
- query = QueryFactory.newQuery(Executive.class, crit);
- result = broker.getCollectionByQuery(query);
- assertEquals(5, result.size());
-
- crit = new Criteria();
- crit.addLike("name", name + "%");
- query = QueryFactory.newQuery(Manager.class, crit);
- result = broker.getCollectionByQuery(query);
- assertEquals(3, result.size());
-
- em = (Employee) SerializationUtils.clone(em);
- m_1 = (Manager) SerializationUtils.clone(m_1);
- m_2 = (Manager) SerializationUtils.clone(m_2);
- m_3 = (Manager) SerializationUtils.clone(m_3);
- ex_1 = (Executive) SerializationUtils.clone(ex_1);
- ex_2 = (Executive) SerializationUtils.clone(ex_2);
-
- em.setName(em.getName() + "_updated");
- m_1.setName(m_1.getName() + "_updated");
- m_2.setName(m_2.getName() + "_updated");
- m_3.setName(m_3.getName() + "_updated");
- ex_1.setName(ex_1.getName() + "_updated");
- ex_2.setName(ex_2.getName() + "_updated");
-
- broker.clearCache();
- broker.beginTransaction();
- broker.store(em);
- broker.store(m_1);
- broker.store(m_3);
- broker.store(ex_1);
- broker.store(m_2);
- broker.store(ex_2);
- broker.commitTransaction();
-
- /*
- after de/serialization and update we expect the same row count in
- each table
- */
- broker.clearCache();
- crit = new Criteria();
- crit.addLike("name", name + "%");
- crit.addLike("department", "none");
- query = QueryFactory.newQuery(Manager.class, crit);
- result = broker.getCollectionByQuery(query);
- assertEquals("Expect the same number of objects as before update", 1, result.size());
-
- crit = new Criteria();
- crit.addLike("name", name + "%");
- query = QueryFactory.newQuery(Employee.class, crit);
- result = broker.getCollectionByQuery(query);
- assertEquals("Expect the same number of objects as before update", 6, result.size());
-
- crit = new Criteria();
- crit.addLike("name", name + "%");
- query = QueryFactory.newQuery(Executive.class, crit);
- result = broker.getCollectionByQuery(query);
- assertEquals("Expect the same number of objects as before update", 5, result.size());
-
- crit = new Criteria();
- crit.addLike("name", name + "%");
- query = QueryFactory.newQuery(Manager.class, crit);
- result = broker.getCollectionByQuery(query);
- assertEquals("Expect the same number of objects as before update", 3, result.size());
- }
-
- private void prepareForQueryTests(Long id_2, String name)
- {
- Manager m_1 = new Manager(id_2, name + "_manager_1");
- Manager m_2 = new Manager(id_2, name + "_manager_2");
- Manager m_3 = new Manager(id_2, name + "_manager_3");
- m_3.setDepartment("none");
- Address a_1 = new Address("snob allee");
- m_1.setAddress(a_1);
-
- Executive ex_1 = new Executive(id_2, name + "_executive", "department_1", null);
- Executive ex_2 = new Executive(id_2, name + "_executive", "department_1", null);
-
- Employee em = new Employee(id_2, name + "_employee");
- Address a_2 = new Address("cockroaches valley");
- em.setAddress(a_2);
-
- broker.beginTransaction();
- broker.store(m_1);
- broker.store(m_2);
- broker.store(m_3);
- broker.store(ex_1);
- broker.store(ex_2);
- broker.store(em);
- broker.commitTransaction();
- }
-
- public void testQuery_InheritedObjects()
- {
- long timestamp = System.currentTimeMillis();
- Long id_2 = new Long(timestamp);
- String name = "testQuery_InheritedObjects" + timestamp;
- prepareForQueryTests(id_2, name);
- broker.clearCache();
-
- Criteria crit = new Criteria();
- crit.addLike("name", name + "%");
- Query query = QueryFactory.newQuery(Employee.class, crit);
- Collection result = broker.getCollectionByQuery(query);
- assertEquals(6, result.size());
- for (Iterator iterator = result.iterator(); iterator.hasNext();)
- {
- Employee obj = (Employee) iterator.next();
- assertNotNull(obj.getName());
- }
-
- broker.clearCache();
- crit = new Criteria();
- crit.addLike("name", name + "%");
- query = QueryFactory.newQuery(Executive.class, crit);
- result = broker.getCollectionByQuery(query);
- assertEquals(5, result.size());
- for (Iterator iterator = result.iterator(); iterator.hasNext();)
- {
- Executive obj = (Executive) iterator.next();
- assertNotNull(obj.getName());
- }
-
- broker.clearCache();
- crit = new Criteria();
- crit.addLike("name", name + "%");
- query = QueryFactory.newQuery(Manager.class, crit);
- result = broker.getCollectionByQuery(query);
- assertEquals(3, result.size());
- for (Iterator iterator = result.iterator(); iterator.hasNext();)
- {
- Manager obj = (Manager) iterator.next();
- assertNotNull(obj.getName());
- }
- }
-
- public void testQuery_InheritedField()
- {
- long timestamp = System.currentTimeMillis();
- Long id_2 = new Long(timestamp);
- String name = "testQuery_InheritedField" + timestamp;
- prepareForQueryTests(id_2, name);
- broker.clearCache();
-
- broker.clearCache();
- Criteria crit = new Criteria();
- crit.addLike("name", name + "%");
- crit.addLike("department", "none");
- Query query = QueryFactory.newQuery(Manager.class, crit);
- Collection result = broker.getCollectionByQuery(query);
- assertEquals(1, result.size());
- }
-
- public void testQuery_Reference()
- {
- long timestamp = System.currentTimeMillis();
- Long id_2 = new Long(timestamp);
- String name = "testQuery_Reference" + timestamp;
- prepareForQueryTests(id_2, name);
- broker.clearCache();
-
- Criteria crit = new Criteria();
- crit.addLike("name", name + "%");
- crit.addLike("address.street", "%valley");
- Query query = QueryFactory.newQuery(Employee.class, crit);
- Collection result = broker.getCollectionByQuery(query);
- assertEquals(1, result.size());
- Employee emp = (Employee) result.iterator().next();
- assertNotNull(emp.getAddress());
- assertEquals("cockroaches valley", emp.getAddress().getStreet());
- }
-
- public void testQuery_InheritedReference_1()
- {
- long timestamp = System.currentTimeMillis();
- Long id_2 = new Long(timestamp);
- String name = "testQuery_InheritedReference_1" + timestamp;
- prepareForQueryTests(id_2, name);
- broker.clearCache();
-
- Criteria crit = new Criteria();
- crit.addLike("name", name + "%");
- crit.addEqualTo("address.street", "snob allee");
- Query query = QueryFactory.newQuery(Manager.class, crit);
- Collection result = broker.getCollectionByQuery(query);
- assertEquals(1, result.size());
- Manager retManager = (Manager) result.iterator().next();
- assertNotNull(retManager);
- assertEquals(name + "_manager_1", retManager.getName());
- assertNotNull(retManager.getAddress());
- assertEquals("snob allee", retManager.getAddress().getStreet());
- }
-
- public void testQuery_InheritedReference_2()
- {
- long timestamp = System.currentTimeMillis();
- Long id_2 = new Long(timestamp);
- String name = "testQuery_InheritedReference_2" + timestamp;
- prepareForQueryTests(id_2, name);
- broker.clearCache();
-
- Criteria crit = new Criteria();
- crit.addLike("name", name + "%");
- crit.addEqualTo("address.street", "snob allee");
- Query query = QueryFactory.newQuery(Executive.class, crit);
- Collection result = broker.getCollectionByQuery(query);
- assertEquals(1, result.size());
-
- Executive retManager = (Executive) result.iterator().next();
- assertNotNull(retManager);
- assertEquals(name + "_manager_1", retManager.getName());
- }
-
- public void testQuery_InheritedReference_3()
- {
- long timestamp = System.currentTimeMillis();
- Long id_2 = new Long(timestamp);
- String name = "testQuery_InheritedReference_3" + timestamp;
- prepareForQueryTests(id_2, name);
- broker.clearCache();
-
- Criteria crit = new Criteria();
- crit.addLike("name", name + "%");
- crit.addEqualTo("address.street", "snob allee");
- Query query = QueryFactory.newQuery(Employee.class, crit);
- Collection result = broker.getCollectionByQuery(query);
- assertEquals(1, result.size());
- }
-
- public void testInsertQuery()
- {
- long timestamp = System.currentTimeMillis();
- Long id_2 = new Long(timestamp);
- String name = "testInsert" + timestamp;
- Employee em1 = new Employee(id_2, name);
- Executive ex1 = new Executive(id_2, name, "department_1", null);
- Executive ex2 = new Executive(id_2, name, "department_2", null);
- ArrayList list = new ArrayList();
- list.add(ex1);
- list.add(ex2);
- Manager m1 = new Manager(id_2, name);
- m1.setExecutives(list);
-
- broker.beginTransaction();
- broker.store(em1);
- broker.store(m1);
- broker.commitTransaction();
-
- Identity m1_oid = new Identity(m1, broker);
- Identity ex1_oid = new Identity(ex1, broker);
- Identity em1_oid = new Identity(em1, broker);
-
- broker.clearCache();
-
- Employee newEm1 = (Employee) broker.getObjectByIdentity(em1_oid);
- Executive newEx1 = (Executive) broker.getObjectByIdentity(ex1_oid);
- Manager newM1 = (Manager) broker.getObjectByIdentity(m1_oid);
-
- assertEquals(em1, newEm1);
- assertEquals(ex1, newEx1);
- assertEquals(m1, newM1);
- assertEquals(name, newEx1.getName());
- assertEquals(name, newM1.getName());
-
- assertEquals(2, newM1.getExecutives().size());
-
- Criteria crit = new Criteria();
- crit.addEqualTo("name", name);
- Query queryEmployee = QueryFactory.newQuery(Employee.class, crit);
- Query queryExecutive = QueryFactory.newQuery(Executive.class, crit);
- Query queryManager = QueryFactory.newQuery(Manager.class, crit);
-
- Collection result = broker.getCollectionByQuery(queryEmployee);
- assertEquals(4, result.size());
-
- result = broker.getCollectionByQuery(queryExecutive);
- assertEquals(3, result.size());
-
- result = broker.getCollectionByQuery(queryManager);
- assertEquals(1, result.size());
- }
-
- public void testDelete()
- {
- long timestamp = System.currentTimeMillis();
- Long id_2 = new Long(timestamp);
- String name = "testUpdate" + timestamp;
- Employee em1 = new Employee(id_2, "employee_" + name);
- Executive ex1 = new Executive(id_2, "executive_" + name, "department_1", null);
- Executive ex2 = new Executive(id_2, "executive_" + name, "department_2", null);
- ArrayList list = new ArrayList();
- list.add(ex1);
- list.add(ex2);
- Manager m1 = new Manager(id_2, "manager_" + name);
- m1.setExecutives(list);
-
- broker.beginTransaction();
- broker.store(em1);
- broker.store(m1);
- broker.commitTransaction();
-
- Identity m1_oid = new Identity(m1, broker);
- Identity ex1_oid = new Identity(ex1, broker);
- Identity em1_oid = new Identity(em1, broker);
-
- broker.clearCache();
-
- Employee newEm1 = (Employee) broker.getObjectByIdentity(em1_oid);
- Executive newEx1 = (Executive) broker.getObjectByIdentity(ex1_oid);
- Manager newM1 = (Manager) broker.getObjectByIdentity(m1_oid);
-
- assertNotNull(newEm1);
- assertNotNull(newEx1);
- assertNotNull(newM1);
- assertEquals(2, newM1.getExecutives().size());
-
- broker.beginTransaction();
- broker.delete(newEm1);
- broker.delete(newEx1);
- broker.delete(newM1);
- broker.commitTransaction();
-
- newEm1 = (Employee) broker.getObjectByIdentity(em1_oid);
- newEx1 = (Executive) broker.getObjectByIdentity(ex1_oid);
- newM1 = (Manager) broker.getObjectByIdentity(m1_oid);
-
- assertNull(newEm1);
- assertNull(newEx1);
- assertNull(newM1);
- }
-
- //************************************************************
- // inner classes used for test
- //************************************************************
- public static class Manager extends Executive
- {
- private List executives;
-
- public Manager()
- {
- }
-
- public Manager(Long id_2, String name)
- {
- super(id_2, name, null, null);
- }
-
- public List getExecutives()
- {
- return executives;
- }
-
- public void setExecutives(List executives)
- {
- this.executives = executives;
- }
- }
-
- public static class Executive extends Employee
- {
- private String department;
- private Manager manager;
-
- public Executive()
- {
- }
-
- public Executive(Long id_2, String name, String department, Manager manager)
- {
- super(id_2, name);
- this.department = department;
- this.manager = manager;
- }
-
- public String getDepartment()
- {
- return department;
- }
-
- public void setDepartment(String department)
- {
- this.department = department;
- }
-
- public Manager getManager()
- {
- return manager;
- }
-
- public void setManager(Manager manager)
- {
- this.manager = manager;
- }
-
- public boolean equals(Object obj)
- {
- if (!(obj instanceof Executive))
- {
- return false;
- }
- Executive ex = (Executive) obj;
- return new EqualsBuilder().append(getId(), ex.getId())
- .append(getName(), ex.getName())
- .append(getDepartment(), ex.getDepartment()).isEquals();
- }
- }
-
- public static class Employee implements Serializable
- {
- private Integer id;
- private Long id_2;
- private String name;
- private AddressIF address;
-
- public Employee()
- {
- }
-
- public Employee(Long id_2, String name)
- {
- this.id_2 = id_2;
- this.name = name;
- }
-
- public Integer getId()
- {
- return id;
- }
-
- public Long getId_2()
- {
- return id_2;
- }
-
- public void setId_2(Long id_2)
- {
- this.id_2 = id_2;
- }
-
- public void setId(Integer id)
- {
- this.id = id;
- }
-
- public AddressIF getAddress()
- {
- return address;
- }
-
- public void setAddress(AddressIF address)
- {
- this.address = address;
- }
-
- public String getName()
- {
- return name;
- }
-
- public void setName(String name)
- {
- this.name = name;
- }
-
- public boolean equals(Object obj)
- {
- if (!(obj instanceof Employee))
- {
- return false;
- }
- Employee em = (Employee) obj;
- return new EqualsBuilder()
- .append(getId(), em.getId())
- .append(getId_2(), em.getId_2())
- .append(getName(), em.getName())
- .isEquals();
- }
-
- public String toString()
- {
- return ToStringBuilder.reflectionToString(this, ToStringStyle.MULTI_LINE_STYLE, false, Employee.class);
- }
- }
-
- public static class Address implements AddressIF
- {
- private Integer id;
- private String street;
-
- public Address()
- {
- }
-
- public Address(String street)
- {
- this.street = street;
- }
-
- public Integer getId()
- {
- return id;
- }
-
- public void setId(Integer id)
- {
- this.id = id;
- }
-
- public String getStreet()
- {
- return street;
- }
-
- public void setStreet(String street)
- {
- this.street = street;
- }
- }
-
- public static interface AddressIF
- {
- public Integer getId();
-
- public void setId(Integer id);
-
- public String getStreet();
-
- public void setStreet(String street);
- }
-
- public static class Company
- {
- private Long id;
- private String name;
- private List employees;
-
- public Company()
- {
- }
-
- public Company(Long id, String name, List employees)
- {
- this.id = id;
- this.name = name;
- this.employees = employees;
- }
-
- public Long getId()
- {
- return id;
- }
-
- public void setId(Long id)
- {
- this.id = id;
- }
-
- public String getName()
- {
- return name;
- }
-
- public void setName(String name)
- {
- this.name = name;
- }
-
- public List getEmployees()
- {
- return employees;
- }
-
- public void setEmployees(List employees)
- {
- this.employees = employees;
- }
- }
-}
+package org.apache.ojb.broker;
+
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.List;
+
+import org.apache.commons.lang.SerializationUtils;
+import org.apache.commons.lang.builder.EqualsBuilder;
+import org.apache.commons.lang.builder.ToStringBuilder;
+import org.apache.commons.lang.builder.ToStringStyle;
+import org.apache.ojb.broker.accesslayer.sql.SqlGenerator;
+import org.apache.ojb.broker.metadata.ClassDescriptor;
+import org.apache.ojb.broker.query.Criteria;
+import org.apache.ojb.broker.query.Query;
+import org.apache.ojb.broker.query.QueryByCriteria;
+import org.apache.ojb.broker.query.QueryFactory;
+import org.apache.ojb.junit.PBTestCase;
+
+/**
+ * These tests check inheritance using multiple tables via 1:1 reference and "super" keyword in
+ * reference descriptor. The test objects use a composite PK.
+ * One autoincrement PK field - Integer. One non-autoincrement PK field with manually set PK- Long.
+ *
+ * @author <a href="mailto:arminw@apache.org">Armin Waibel</a>
+ * @version $Id$
+ */
+public class InheritanceMultipleTableTest extends PBTestCase
+{
+ public static void main(String[] args)
+ {
+ junit.textui.TestRunner.main(new String[]{InheritanceMultipleTableTest.class.getName()});
+ }
+
+ public void setUp() throws Exception
+ {
+ super.setUp();
+ // allow to batch statements
+ broker.serviceConnectionManager().setBatchMode(true);
+ }
+
+ public void testInheritancedObjectsInCollectionReferences()
+ {
+ if(ojbSkipKnownIssueProblem("References of classes (1:1, 1:n) mapped to multiple joined tables only" +
+ " return base class type instances"))
+ {
+ return;
+ }
+
+ long timestamp = System.currentTimeMillis();
+ Long id_2 = new Long(timestamp);
+ String name = "testInheritancedObjectsInCollectionReferences_" + timestamp;
+ Company company = prepareTestDataWithCompany(id_2, name);
+
+ broker.clearCache();
+ Criteria crit = new Criteria();
+ crit.addEqualTo("id", id_2);
+ Query query = QueryFactory.newQuery(Company.class, crit);
+ Collection result = broker.getCollectionByQuery(query);
+ assertEquals(1, result.size());
+
+ Company newCompany = (Company) result.iterator().next();
+ List newEmployees = newCompany.getEmployees();
+ assertNotNull(newEmployees);
+ assertEquals(company.getEmployees().size(), newEmployees.size());
+ List newManagers = newCompany.getManagers();
+ assertNotNull(newManagers);
+ assertEquals(company.getManagers().size(), newManagers.size());
+
+ int countEmployee = 0;
+ int countExecutive = 0;
+ int countManager = 0;
+ for(int i = 0; i < newEmployees.size(); i++)
+ {
+ Object o = newEmployees.get(i);
+ if(o instanceof Employee)
+ {
+ ++countEmployee;
+ }
+ if(o instanceof Executive)
+ {
+ ++countExecutive;
+ }
+ if(o instanceof Manager)
+ {
+ ++countManager;
+ }
+ }
+ assertEquals(6, countEmployee);
+ /*
+ bug:
+ expect that the real classes will be populated
+ currently this does not happen, only objects of
+ type Employee will be returned.
+ */
+ assertEquals(5, countExecutive);
+ assertEquals(3, countManager);
+ }
+
+ private Company prepareTestDataWithCompany(Long id_2, String name) {
+ Manager m_1 = new Manager(id_2, name + "_manager_1");
+ Manager m_2 = new Manager(id_2, name + "_manager_2");
+ Manager m_3 = new Manager(id_2, name + "_manager_3");
+ m_3.setDepartment("none");
+ Executive ex_1 = new Executive(id_2, name + "_executive", "department_1", null);
+ Executive ex_2 = new Executive(id_2, name + "_executive", "department_1", null);
+ Employee em = new Employee(id_2, name + "_employee");
+
+ ArrayList employees = new ArrayList();
+ employees.add(m_1);
+ employees.add(m_2);
+ employees.add(m_3);
+ employees.add(ex_1);
+ employees.add(ex_2);
+ employees.add(em);
+
+ ArrayList managers = new ArrayList();
+ managers.add(m_1);
+ managers.add(m_2);
+ managers.add(m_3);
+
+ Company company = new Company(id_2, name, employees, managers);
+ broker.beginTransaction();
+ broker.store(company);
+ broker.commitTransaction();
+ return company;
+ }
+
+ public void testUpdate()
+ {
+ long timestamp = System.currentTimeMillis();
+ Long id_2 = new Long(timestamp);
+ String name = "testUpdate" + timestamp;
+ Employee em1 = new Employee(id_2, "employee_" + name);
+ Executive ex1 = new Executive(id_2, "executive_" + name, "department_1", null);
+ Executive ex2 = new Executive(id_2, "executive_" + name, "department_2", null);
+ ArrayList list = new ArrayList();
+ list.add(ex1);
+ list.add(ex2);
+ Manager m1 = new Manager(id_2, "manager_" + name);
+ m1.setExecutives(list);
+
+ broker.beginTransaction();
+ broker.store(em1);
+ broker.store(m1);
+ broker.commitTransaction();
+
+ Identity m1_oid = new Identity(m1, broker);
+ Identity ex1_oid = new Identity(ex1, broker);
+ Identity em1_oid = new Identity(em1, broker);
+
+ broker.clearCache();
+
+ Employee newEm1 = (Employee) broker.getObjectByIdentity(em1_oid);
+ Executive newEx1 = (Executive) broker.getObjectByIdentity(ex1_oid);
+ Manager newM1 = (Manager) broker.getObjectByIdentity(m1_oid);
+
+ assertEquals(2, newM1.getExecutives().size());
+
+ newEm1.setName("**updated_" + name);
+ newM1.setName("**updated_" + name);
+ ((Executive) newM1.getExecutives().get(0)).setName("**updated_" + name);
+
+ broker.beginTransaction();
+ broker.store(newEm1);
+ broker.store(newM1);
+ broker.store(newEx1);
+ broker.commitTransaction();
+
+ broker.clearCache();
+
+ em1 = (Employee) broker.getObjectByIdentity(em1_oid);
+ ex1 = (Executive) broker.getObjectByIdentity(ex1_oid);
+ m1 = (Manager) broker.getObjectByIdentity(m1_oid);
+
+ assertEquals(newEm1, em1);
+ assertEquals(newEx1, ex1);
+ assertEquals(newM1, m1);
+
+ assertEquals(2, m1.getExecutives().size());
+ }
+
+ public void testStoreUpdateQuerySerialized_2()
+ {
+ long timestamp = System.currentTimeMillis();
+ Long id_2 = new Long(timestamp);
+ String name = "testStoreUpdateQuerySerialized_" + timestamp;
+ Manager m_1 = new Manager(id_2, name + "_manager_1");
+ Manager m_2 = new Manager(id_2, name + "_manager_2");
+ Manager m_3 = new Manager(id_2, name + "_manager_3");
+ m_3.setDepartment("none");
+
+ Executive ex_1 = new Executive(id_2, name + "_executive", "department_1", null);
+ Executive ex_2 = new Executive(id_2, name + "_executive", "department_1", null);
+
+ Employee em = new Employee(id_2, name + "_employee");
+
+ broker.beginTransaction();
+ broker.store(em);
+ broker.store(m_1);
+ broker.store(m_3);
+ broker.store(ex_1);
+ broker.store(m_2);
+ broker.store(ex_2);
+ broker.commitTransaction();
+
+ broker.clearCache();
+ Criteria crit = new Criteria();
+ crit.addLike("name", name + "%");
+ crit.addLike("department", "none");
+ Query query = QueryFactory.newQuery(Manager.class, crit);
+ Collection result = broker.getCollectionByQuery(query);
+ assertEquals(1, result.size());
+
+ crit = new Criteria();
+ crit.addLike("name", name + "%");
+ query = QueryFactory.newQuery(Employee.class, crit);
+ result = broker.getCollectionByQuery(query);
+ assertEquals(6, result.size());
+
+ crit = new Criteria();
+ crit.addLike("name", name + "%");
+ query = QueryFactory.newQuery(Executive.class, crit);
+ result = broker.getCollectionByQuery(query);
+ assertEquals(5, result.size());
+
+ crit = new Criteria();
+ crit.addLike("name", name + "%");
+ query = QueryFactory.newQuery(Manager.class, crit);
+ result = broker.getCollectionByQuery(query);
+ assertEquals(3, result.size());
+
+ em = (Employee) SerializationUtils.clone(em);
+ m_1 = (Manager) SerializationUtils.clone(m_1);
+ m_2 = (Manager) SerializationUtils.clone(m_2);
+ m_3 = (Manager) SerializationUtils.clone(m_3);
+ ex_1 = (Executive) SerializationUtils.clone(ex_1);
+ ex_2 = (Executive) SerializationUtils.clone(ex_2);
+
+ em.setName(em.getName() + "_updated");
+ m_1.setName(m_1.getName() + "_updated");
+ m_1.setDepartment("_updated_Dep");
+ m_2.setName(m_2.getName() + "_updated");
+ m_3.setName(m_3.getName() + "_updated");
+ ex_1.setName(ex_1.getName() + "_updated");
+ ex_2.setName(ex_2.getName() + "_updated");
+
+ broker.clearCache();
+ broker.beginTransaction();
+ //========================================
+ // update only modified fields
+ broker.update(em, new String[]{"name"});
+ broker.update(m_1, new String[]{"name", "department"});
+ broker.update(m_3, new String[]{"name"});
+ broker.update(ex_1, new String[]{"name"});
+ broker.update(m_2, new String[]{"name"});
+ broker.update(ex_2, new String[]{"name"});
+ //========================================
+ broker.commitTransaction();
+
+ /*
+ after de/serialization and update we expect the same row count in
+ each table
+ */
+ broker.clearCache();
+
+ crit = new Criteria();
+ crit.addLike("name", name + "%");
+ crit.addLike("department", "_updated_Dep");
+ query = QueryFactory.newQuery(Manager.class, crit);
+ result = broker.getCollectionByQuery(query);
+ assertEquals("Expect the same number of objects as before update", 1, result.size());
+ Manager newMan = (Manager) result.iterator().next();
+ assertEquals(m_1.getName(), newMan.getName());
+ assertEquals(m_1.getDepartment(), newMan.getDepartment());
+
+ crit = new Criteria();
+ crit.addLike("name", name + "%");
+ crit.addLike("department", "none");
+ query = QueryFactory.newQuery(Manager.class, crit);
+ result = broker.getCollectionByQuery(query);
+ assertEquals("Expect the same number of objects as before update", 1, result.size());
+
+ crit = new Criteria();
+ crit.addLike("name", name + "%");
+ query = QueryFactory.newQuery(Employee.class, crit);
+ result = broker.getCollectionByQuery(query);
+ assertEquals("Expect the same number of objects as before update", 6, result.size());
+
+ crit = new Criteria();
+ crit.addLike("name", name + "%");
+ query = QueryFactory.newQuery(Executive.class, crit);
+ result = broker.getCollectionByQuery(query);
+ assertEquals("Expect the same number of objects as before update", 5, result.size());
+
+ crit = new Criteria();
+ crit.addLike("name", name + "%");
+ query = QueryFactory.newQuery(Manager.class, crit);
+ result = broker.getCollectionByQuery(query);
+ assertEquals("Expect the same number of objects as before update", 3, result.size());
+ }
+
+ public void testObjectExistence()
+ {
+ Manager target_1 = new Manager(new Long(1), "testObjectExistence");
+ Manager target_2 = new Manager(new Long(System.currentTimeMillis()), "testObjectExistence");
+
+ Identity oid_1 = broker.serviceIdentity().buildIdentity(target_1);
+ Identity oid_2 = broker.serviceIdentity().buildIdentity(target_2);
+
+ ClassDescriptor cld = broker.getClassDescriptor(Manager.class);
+
+ boolean b_1 = broker.serviceJdbcAccess().doesExist(cld, oid_1);
+ boolean b_2 = broker.serviceJdbcAccess().doesExist(cld, oid_2);
+ assertFalse(b_1);
+ assertFalse(b_2);
+ }
+
+ public void testStoreUpdateQuerySerialized()
+ {
+ long timestamp = System.currentTimeMillis();
+ Long id_2 = new Long(timestamp);
+ String name = "testStoreUpdateQuerySerialized_" + timestamp;
+ Manager m_1 = new Manager(id_2, name + "_manager_1");
+ Manager m_2 = new Manager(id_2, name + "_manager_2");
+ Manager m_3 = new Manager(id_2, name + "_manager_3");
+ m_3.setDepartment("none");
+
+ Executive ex_1 = new Executive(id_2, name + "_executive", "department_1", null);
+ Executive ex_2 = new Executive(id_2, name + "_executive", "department_1", null);
+
+ Employee em = new Employee(id_2, name + "_employee");
+
+ broker.beginTransaction();
+ broker.store(em);
+ broker.store(m_1);
+ broker.store(m_3);
+ broker.store(ex_1);
+ broker.store(m_2);
+ broker.store(ex_2);
+ broker.commitTransaction();
+
+ broker.clearCache();
+ Criteria crit = new Criteria();
+ crit.addLike("name", name + "%");
+ crit.addLike("department", "none");
+ Query query = QueryFactory.newQuery(Manager.class, crit);
+ Collection result = broker.getCollectionByQuery(query);
+ assertEquals(1, result.size());
+
+ crit = new Criteria();
+ crit.addLike("name", name + "%");
+ query = QueryFactory.newQuery(Employee.class, crit);
+ result = broker.getCollectionByQuery(query);
+ assertEquals(6, result.size());
+
+ crit = new Criteria();
+ crit.addLike("name", name + "%");
+ query = QueryFactory.newQuery(Executive.class, crit);
+ result = broker.getCollectionByQuery(query);
+ assertEquals(5, result.size());
+
+ crit = new Criteria();
+ crit.addLike("name", name + "%");
+ query = QueryFactory.newQuery(Manager.class, crit);
+ result = broker.getCollectionByQuery(query);
+ assertEquals(3, result.size());
+
+ em = (Employee) SerializationUtils.clone(em);
+ m_1 = (Manager) SerializationUtils.clone(m_1);
+ m_2 = (Manager) SerializationUtils.clone(m_2);
+ m_3 = (Manager) SerializationUtils.clone(m_3);
+ ex_1 = (Executive) SerializationUtils.clone(ex_1);
+ ex_2 = (Executive) SerializationUtils.clone(ex_2);
+
+ em.setName(em.getName() + "_updated");
+ m_1.setName(m_1.getName() + "_updated");
+ m_2.setName(m_2.getName() + "_updated");
+ m_3.setName(m_3.getName() + "_updated");
+ ex_1.setName(ex_1.getName() + "_updated");
+ ex_2.setName(ex_2.getName() + "_updated");
+
+ broker.clearCache();
+ broker.beginTransaction();
+ broker.store(em);
+ broker.store(m_1);
+ broker.store(m_3);
+ broker.store(ex_1);
+ broker.store(m_2);
+ broker.store(ex_2);
+ broker.commitTransaction();
+
+ /*
+ after de/serialization and update we expect the same row count in
+ each table
+ */
+ broker.clearCache();
+ crit = new Criteria();
+ crit.addLike("name", name + "%");
+ crit.addLike("department", "none");
+ query = QueryFactory.newQuery(Manager.class, crit);
+ result = broker.getCollectionByQuery(query);
+ assertEquals("Expect the same number of objects as before update", 1, result.size());
+
+ crit = new Criteria();
+ crit.addLike("name", name + "%");
+ query = QueryFactory.newQuery(Employee.class, crit);
+ result = broker.getCollectionByQuery(query);
+ assertEquals("Expect the same number of objects as before update", 6, result.size());
+
+ crit = new Criteria();
+ crit.addLike("name", name + "%");
+ query = QueryFactory.newQuery(Executive.class, crit);
+ result = broker.getCollectionByQuery(query);
+ assertEquals("Expect the same number of objects as before update", 5, result.size());
+
+ crit = new Criteria();
+ crit.addLike("name", name + "%");
+ query = QueryFactory.newQuery(Manager.class, crit);
+ result = broker.getCollectionByQuery(query);
+ assertEquals("Expect the same number of objects as before update", 3, result.size());
+ }
+
+ private void prepareForQueryTests(Long id_2, String name)
+ {
+ Manager m_1 = new Manager(id_2, name + "_manager_1");
+ Manager m_2 = new Manager(id_2, name + "_manager_2");
+ Manager m_3 = new Manager(id_2, name + "_manager_3");
+ m_3.setDepartment("none");
+ Address a_1 = new Address("snob allee");
+ m_1.setAddress(a_1);
+
+ Executive ex_1 = new Executive(id_2, name + "_executive", "department_1", null);
+ Executive ex_2 = new Executive(id_2, name + "_executive", "department_1", null);
+
+ Employee em = new Employee(id_2, name + "_employee");
+ Address a_2 = new Address("cockroaches valley");
+ em.setAddress(a_2);
+
+ broker.beginTransaction();
+ broker.store(m_1);
+ broker.store(m_2);
+ broker.store(m_3);
+ broker.store(ex_1);
+ broker.store(ex_2);
+ broker.store(em);
+ broker.commitTransaction();
+ }
+
+ public void testQuery_InheritedObjects()
+ {
+ long timestamp = System.currentTimeMillis();
+ Long id_2 = new Long(timestamp);
+ String name = "testQuery_InheritedObjects" + timestamp;
+ prepareForQueryTests(id_2, name);
+ broker.clearCache();
+
+ Criteria crit = new Criteria();
+ crit.addLike("name", name + "%");
+ Query query = QueryFactory.newQuery(Employee.class, crit);
+ Collection result = broker.getCollectionByQuery(query);
+ assertEquals(6, result.size());
+ for (Iterator iterator = result.iterator(); iterator.hasNext();)
+ {
+ Employee obj = (Employee) iterator.next();
+ assertNotNull(obj.getName());
+ }
+
+ broker.clearCache();
+ crit = new Criteria();
+ crit.addLike("name", name + "%");
+ query = QueryFactory.newQuery(Executive.class, crit);
+ result = broker.getCollectionByQuery(query);
+ assertEquals(5, result.size());
+ for (Iterator iterator = result.iterator(); iterator.hasNext();)
+ {
+ Executive obj = (Executive) iterator.next();
+ assertNotNull(obj.getName());
+ }
+
+ broker.clearCache();
+ crit = new Criteria();
+ crit.addLike("name", name + "%");
+ query = QueryFactory.newQuery(Manager.class, crit);
+ result = broker.getCollectionByQuery(query);
+ assertEquals(3, result.size());
+ for (Iterator iterator = result.iterator(); iterator.hasNext();)
+ {
+ Manager obj = (Manager) iterator.next();
+ assertNotNull(obj.getName());
+ }
+ }
+
+ public void testQuery_InheritedField()
+ {
+ long timestamp = System.currentTimeMillis();
+ Long id_2 = new Long(timestamp);
+ String name = "testQuery_InheritedField" + timestamp;
+ prepareForQueryTests(id_2, name);
+ broker.clearCache();
+
+ broker.clearCache();
+ Criteria crit = new Criteria();
+ crit.addLike("name", name + "%");
+ crit.addLike("department", "none");
+ Query query = QueryFactory.newQuery(Manager.class, crit);
+ Collection result = broker.getCollectionByQuery(query);
+ assertEquals(1, result.size());
+ }
+
+ public void testQuery_Reference()
+ {
+ long timestamp = System.currentTimeMillis();
+ Long id_2 = new Long(timestamp);
+ String name = "testQuery_Reference" + timestamp;
+ prepareForQueryTests(id_2, name);
+ broker.clearCache();
+
+ Criteria crit = new Criteria();
+ crit.addLike("name", name + "%");
+ crit.addLike("address.street", "%valley");
+ Query query = QueryFactory.newQuery(Employee.class, crit);
+ Collection result = broker.getCollectionByQuery(query);
+ assertEquals(1, result.size());
+ Employee emp = (Employee) result.iterator().next();
+ assertNotNull(emp.getAddress());
+ assertEquals("cockroaches valley", emp.getAddress().getStreet());
+ }
+
+ public void testQuery_ReferenceOuterJoin()
+ {
+ long timestamp = System.currentTimeMillis();
+ Long id_2 = new Long(timestamp);
+ String name = "testQuery_ReferenceOuterJoin" + timestamp;
+ Company comp = prepareTestDataWithCompany(id_2, name);
+
+ // Store a dummy company
+ Company dummyComp = new Company(new Long(System.currentTimeMillis()), name + "_dummy",
+ Collections.EMPTY_LIST, Collections.EMPTY_LIST);
+ broker.beginTransaction();
+ broker.store(dummyComp);
+ broker.commitTransaction();
+
+ broker.clearCache();
+
+ Criteria crit = new Criteria();
+ crit.addLike("name", name + "%");
+ crit.addLike("managers.name", name + "%");
+ QueryByCriteria query = QueryFactory.newQuery(Company.class, crit, true);
+ query.addOrderByAscending("id");
+ query.setPathOuterJoin("managers");
+
+ SqlGenerator sqlg = broker.serviceSqlGenerator();
+ String sql = sqlg.getPreparedSelectStatement(query, broker.getClassDescriptor(Company.class));
+
+ Collection result = broker.getCollectionByQuery(query);
+ assertEquals(2, result.size()); // should retrieve both companies
+ }
+
+ public void testQuery_InheritedReference_1()
+ {
+ long timestamp = System.currentTimeMillis();
+ Long id_2 = new Long(timestamp);
+ String name = "testQuery_InheritedReference_1" + timestamp;
+ prepareForQueryTests(id_2, name);
+ broker.clearCache();
+
+ Criteria crit = new Criteria();
+ crit.addLike("name", name + "%");
+ crit.addEqualTo("address.street", "snob allee");
+ Query query = QueryFactory.newQuery(Manager.class, crit);
+ Collection result = broker.getCollectionByQuery(query);
+ assertEquals(1, result.size());
+ Manager retManager = (Manager) result.iterator().next();
+ assertNotNull(retManager);
+ assertEquals(name + "_manager_1", retManager.getName());
+ assertNotNull(retManager.getAddress());
+ assertEquals("snob allee", retManager.getAddress().getStreet());
+ }
+
+ public void testQuery_InheritedReference_2()
+ {
+ long timestamp = System.currentTimeMillis();
+ Long id_2 = new Long(timestamp);
+ String name = "testQuery_InheritedReference_2" + timestamp;
+ prepareForQueryTests(id_2, name);
+ broker.clearCache();
+
+ Criteria crit = new Criteria();
+ crit.addLike("name", name + "%");
+ crit.addEqualTo("address.street", "snob allee");
+ Query query = QueryFactory.newQuery(Executive.class, crit);
+ Collection result = broker.getCollectionByQuery(query);
+ assertEquals(1, result.size());
+
+ Executive retManager = (Executive) result.iterator().next();
+ assertNotNull(retManager);
+ assertEquals(name + "_manager_1", retManager.getName());
+ }
+
+ public void testQuery_InheritedReference_3()
+ {
+ long timestamp = System.currentTimeMillis();
+ Long id_2 = new Long(timestamp);
+ String name = "testQuery_InheritedReference_3" + timestamp;
+ prepareForQueryTests(id_2, name);
+ broker.clearCache();
+
+ Criteria crit = new Criteria();
+ crit.addLike("name", name + "%");
+ crit.addEqualTo("address.street", "snob allee");
+ Query query = QueryFactory.newQuery(Employee.class, crit);
+ Collection result = broker.getCollectionByQuery(query);
+ assertEquals(1, result.size());
+ }
+
+ public void testInsertQuery()
+ {
+ long timestamp = System.currentTimeMillis();
+ Long id_2 = new Long(timestamp);
+ String name = "testInsert" + timestamp;
+ Employee em1 = new Employee(id_2, name);
+ Executive ex1 = new Executive(id_2, name, "department_1", null);
+ Executive ex2 = new Executive(id_2, name, "department_2", null);
+ ArrayList list = new ArrayList();
+ list.add(ex1);
+ list.add(ex2);
+ Manager m1 = new Manager(id_2, name);
+ m1.setExecutives(list);
+
+ broker.beginTransaction();
+ broker.store(em1);
+ broker.store(m1);
+ broker.commitTransaction();
+
+ Identity m1_oid = new Identity(m1, broker);
+ Identity ex1_oid = new Identity(ex1, broker);
+ Identity em1_oid = new Identity(em1, broker);
+
+ broker.clearCache();
+
+ Employee newEm1 = (Employee) broker.getObjectByIdentity(em1_oid);
+ Executive newEx1 = (Executive) broker.getObjectByIdentity(ex1_oid);
+ Manager newM1 = (Manager) broker.getObjectByIdentity(m1_oid);
+
+ assertEquals(em1, newEm1);
+ assertEquals(ex1, newEx1);
+ assertEquals(m1, newM1);
+ assertEquals(name, newEx1.getName());
+ assertEquals(name, newM1.getName());
+
+ assertEquals(2, newM1.getExecutives().size());
+
+ Criteria crit = new Criteria();
+ crit.addEqualTo("name", name);
+ Query queryEmployee = QueryFactory.newQuery(Employee.class, crit);
+ Query queryExecutive = QueryFactory.newQuery(Executive.class, crit);
+ Query queryManager = QueryFactory.newQuery(Manager.class, crit);
+
+ Collection result = broker.getCollectionByQuery(queryEmployee);
+ assertEquals(4, result.size());
+
+ result = broker.getCollectionByQuery(queryExecutive);
+ assertEquals(3, result.size());
+
+ result = broker.getCollectionByQuery(queryManager);
+ assertEquals(1, result.size());
+ }
+
+ public void testDelete()
+ {
+ long timestamp = System.currentTimeMillis();
+ Long id_2 = new Long(timestamp);
+ String name = "testUpdate" + timestamp;
+ Employee em1 = new Employee(id_2, "employee_" + name);
+ Executive ex1 = new Executive(id_2, "executive_" + name, "department_1", null);
+ Executive ex2 = new Executive(id_2, "executive_" + name, "department_2", null);
+ ArrayList list = new ArrayList();
+ list.add(ex1);
+ list.add(ex2);
+ Manager m1 = new Manager(id_2, "manager_" + name);
+ m1.setExecutives(list);
+
+ broker.beginTransaction();
+ broker.store(em1);
+ broker.store(m1);
+ broker.commitTransaction();
+
+ Identity m1_oid = new Identity(m1, broker);
+ Identity ex1_oid = new Identity(ex1, broker);
+ Identity em1_oid = new Identity(em1, broker);
+
+ broker.clearCache();
+
+ Employee newEm1 = (Employee) broker.getObjectByIdentity(em1_oid);
+ Executive newEx1 = (Executive) broker.getObjectByIdentity(ex1_oid);
+ Manager newM1 = (Manager) broker.getObjectByIdentity(m1_oid);
+
+ assertNotNull(newEm1);
+ assertNotNull(newEx1);
+ assertNotNull(newM1);
+ assertEquals(2, newM1.getExecutives().size());
+
+ broker.beginTransaction();
+ broker.delete(newEm1);
+ broker.delete(newEx1);
+ broker.delete(newM1);
+ broker.commitTransaction();
+
+ newEm1 = (Employee) broker.getObjectByIdentity(em1_oid);
+ newEx1 = (Executive) broker.getObjectByIdentity(ex1_oid);
+ newM1 = (Manager) broker.getObjectByIdentity(m1_oid);
+
+ assertNull(newEm1);
+ assertNull(newEx1);
+ assertNull(newM1);
+ }
+
+ //************************************************************
+ // inner classes used for test
+ //************************************************************
+ public static class Manager extends Executive
+ {
+ private List executives;
+
+ public Manager()
+ {
+ }
+
+ public Manager(Long id_2, String name)
+ {
+ super(id_2, name, null, null);
+ }
+
+ public List getExecutives()
+ {
+ return executives;
+ }
+
+ public void setExecutives(List executives)
+ {
+ this.executives = executives;
+ }
+ }
+
+ public static class Executive extends Employee
+ {
+ private String department;
+ private Manager manager;
+
+ public Executive()
+ {
+ }
+
+ public Executive(Long id_2, String name, String department, Manager manager)
+ {
+ super(id_2, name);
+ this.department = department;
+ this.manager = manager;
+ }
+
+ public String getDepartment()
+ {
+ return department;
+ }
+
+ public void setDepartment(String department)
+ {
+ this.department = department;
+ }
+
+ public Manager getManager()
+ {
+ return manager;
+ }
+
+ public void setManager(Manager manager)
+ {
+ this.manager = manager;
+ }
+
+ public boolean equals(Object obj)
+ {
+ if (!(obj instanceof Executive))
+ {
+ return false;
+ }
+ Executive ex = (Executive) obj;
+ return new EqualsBuilder().append(getId(), ex.getId())
+ .append(getName(), ex.getName())
+ .append(getDepartment(), ex.getDepartment()).isEquals();
+ }
+ }
+
+ public static class Employee implements Serializable
+ {
+ private Integer id;
+ private Long id_2;
+ private String name;
+ private AddressIF address;
+
+ public Employee()
+ {
+ }
+
+ public Employee(Long id_2, String name)
+ {
+ this.id_2 = id_2;
+ this.name = name;
+ }
+
+ public Integer getId()
+ {
+ return id;
+ }
+
+ public Long getId_2()
+ {
+ return id_2;
+ }
+
+ public void setId_2(Long id_2)
+ {
+ this.id_2 = id_2;
+ }
+
+ public void setId(Integer id)
+ {
+ this.id = id;
+ }
+
+ public AddressIF getAddress()
+ {
+ return address;
+ }
+
+ public void setAddress(AddressIF address)
+ {
+ this.address = address;
+ }
+
+ public String getName()
+ {
+ return name;
+ }
+
+ public void setName(String name)
+ {
+ this.name = name;
+ }
+
+ public boolean equals(Object obj)
+ {
+ if (!(obj instanceof Employee))
+ {
+ return false;
+ }
+ Employee em = (Employee) obj;
+ return new EqualsBuilder()
+ .append(getId(), em.getId())
+ .append(getId_2(), em.getId_2())
+ .append(getName(), em.getName())
+ .isEquals();
+ }
+
+ public String toString()
+ {
+ return ToStringBuilder.reflectionToString(this, ToStringStyle.MULTI_LINE_STYLE, false, Employee.class);
+ }
+ }
+
+ public static class Address implements AddressIF
+ {
+ private Integer id;
+ private String street;
+
+ public Address()
+ {
+ }
+
+ public Address(String street)
+ {
+ this.street = street;
+ }
+
+ public Integer getId()
+ {
+ return id;
+ }
+
+ public void setId(Integer id)
+ {
+ this.id = id;
+ }
+
+ public String getStreet()
+ {
+ return street;
+ }
+
+ public void setStreet(String street)
+ {
+ this.street = street;
+ }
+ }
+
+ public static interface AddressIF
+ {
+ public Integer getId();
+
+ public void setId(Integer id);
+
+ public String getStreet();
+
+ public void setStreet(String street);
+ }
+
+ public static class Company
+ {
+ private Long id;
+ private String name;
+ private List employees;
+ private List managers;
+
+ public Company()
+ {
+ }
+
+ public Company(Long id, String name, List employees,List managers)
+ {
+ this.id = id;
+ this.name = name;
+ this.employees = employees;
+ this.managers = managers;
+ }
+
+ public Long getId()
+ {
+ return id;
+ }
+
+ public void setId(Long id)
+ {
+ this.id = id;
+ }
+
+ public String getName()
+ {
+ return name;
+ }
+
+ public void setName(String name)
+ {
+ this.name = name;
+ }
+
+ public List getEmployees()
+ {
+ return employees;
+ }
+
+ public void setEmployees(List employees)
+ {
+ this.employees = employees;
+ }
+
+ public List getManagers() {
+ return managers;
+ }
+
+ public void setManagers(List managers) {
+ this.managers = managers;
+ }
+ }
+}
---------------------------------------------------------------------
To unsubscribe, e-mail: ojb-dev-unsubscribe@db.apache.org
For additional commands, e-mail: ojb-dev-help@db.apache.org