You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cayenne.apache.org by km...@apache.org on 2008/03/28 03:35:30 UTC

svn commit: r642071 - in /cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test: java/org/apache/cayenne/access/ java/org/apache/cayenne/testdo/inherit/ java/org/apache/cayenne/testdo/inherit/auto/ resources/

Author: kmenard
Date: Thu Mar 27 19:35:28 2008
New Revision: 642071

URL: http://svn.apache.org/viewvc?rev=642071&view=rev
Log:
Cleaned up the inheritance tests.

Added:
    cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/testdo/inherit/BaseEntity.java
    cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/testdo/inherit/DirectToSubEntity.java
    cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/testdo/inherit/RelatedEntity.java
    cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/testdo/inherit/SubEntity.java
    cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/testdo/inherit/auto/_BaseEntity.java
    cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/testdo/inherit/auto/_DirectToSubEntity.java
    cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/testdo/inherit/auto/_RelatedEntity.java
    cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/testdo/inherit/auto/_SubEntity.java
Removed:
    cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/testdo/inherit/AbstractAddress.java
    cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/testdo/inherit/HomeAddress.java
    cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/testdo/inherit/auto/_AbstractAddress.java
    cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/testdo/inherit/auto/_HomeAddress.java
Modified:
    cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/access/InheritanceTest.java
    cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/testdo/inherit/auto/_AbstractPerson.java
    cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/testdo/inherit/auto/_Address.java
    cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/testdo/inherit/auto/_ClientCompany.java
    cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/testdo/inherit/auto/_CustomerRepresentative.java
    cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/testdo/inherit/auto/_Department.java
    cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/testdo/inherit/auto/_Employee.java
    cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/testdo/inherit/auto/_Manager.java
    cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/resources/people.map.xml

Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/access/InheritanceTest.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/access/InheritanceTest.java?rev=642071&r1=642070&r2=642071&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/access/InheritanceTest.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/access/InheritanceTest.java Thu Mar 27 19:35:28 2008
@@ -21,10 +21,8 @@
 
 import java.util.Iterator;
 import java.util.List;
-import java.util.ArrayList;
 
 import org.apache.cayenne.DataObjectUtils;
-import org.apache.cayenne.map.ObjRelationship;
 import org.apache.cayenne.query.SelectQuery;
 import org.apache.cayenne.testdo.inherit.AbstractPerson;
 import org.apache.cayenne.testdo.inherit.Address;
@@ -33,7 +31,10 @@
 import org.apache.cayenne.testdo.inherit.Department;
 import org.apache.cayenne.testdo.inherit.Employee;
 import org.apache.cayenne.testdo.inherit.Manager;
-import org.apache.cayenne.testdo.inherit.HomeAddress;
+import org.apache.cayenne.testdo.inherit.RelatedEntity;
+import org.apache.cayenne.testdo.inherit.BaseEntity;
+import org.apache.cayenne.testdo.inherit.SubEntity;
+import org.apache.cayenne.testdo.inherit.DirectToSubEntity;
 import org.apache.cayenne.unit.PeopleCase;
 
 /**
@@ -183,19 +184,19 @@
      * Test for CAY-1008: Reverse relationships may not be correctly set if inheritance is used.
      */
     public void testCAY1008() {
-        Employee e = context.newObject(Employee.class);
+        RelatedEntity related = context.newObject(RelatedEntity.class);
 
-        Address a = context.newObject(Address.class);
-        a.setToEmployee(e);
+        BaseEntity base = context.newObject(BaseEntity.class);
+        base.setToRelatedEntity(related);
 
-        assertEquals(1, e.getAddresses().size());
-        assertEquals(0, e.getHomeAddresses().size());
+        assertEquals(1, related.getBaseEntities().size());
+        assertEquals(0, related.getSubEntities().size());
 
-        HomeAddress ha = context.newObject(HomeAddress.class);
-        ha.setToEmployee(e);
+        SubEntity sub = context.newObject(SubEntity.class);
+        sub.setToRelatedEntity(related);
 
-        assertEquals(2, e.getAddresses().size());
-        assertEquals(1, e.getHomeAddresses().size());
+        assertEquals(2, related.getBaseEntities().size());
+        assertEquals(1, related.getSubEntities().size());
     }
 
     /**
@@ -203,27 +204,27 @@
      */
     public void testCAY1009() {
 
-        // We should have only one relationship.  ClientCompany -> CustomerRepresentative.
-        assertEquals(1, context.getEntityResolver().getObjEntity("ClientCompany").getRelationships().size());
+        // We should have only one relationship.  DirectToSubEntity -> SubEntity.
+        assertEquals(1, context.getEntityResolver().getObjEntity("DirectToSubEntity")
+                .getRelationships().size());
 
         // Simulate a load from a default configuration.
         context.getEntityResolver().applyObjectLayerDefaults();
 
         // We should still just have the one mapped relationship, but we in fact now have two:
-        // ClientCompany -> AbstractPerson and ClientCompany -> CustomerRepresentative.
-        assertEquals(1, context.getEntityResolver().getObjEntity("ClientCompany").getRelationships().size());
+        // DirectToSubEntity -> BaseEntity and DirectToSubEntity -> SubEntity.
+        assertEquals(1, context.getEntityResolver().getObjEntity("DirectToSubEntity")
+                .getRelationships().size());
 
-        ClientCompany company = context.newObject(ClientCompany.class);
-        company.setName("Company");
+        DirectToSubEntity direct = context.newObject(DirectToSubEntity.class);
 
-        CustomerRepresentative rep = context.newObject(CustomerRepresentative.class);
-        rep.setName("Rep");
-        rep.setToClientCompany(company);
+        SubEntity sub = context.newObject(SubEntity.class);
+        sub.setToDirectToSubEntity(direct);
 
-        assertEquals(1, company.getRepresentatives().size());
+        assertEquals(1, direct.getSubEntities().size());
 
-        context.deleteObject(rep);
-        assertEquals(0, company.getRepresentatives().size());
+        context.deleteObject(sub);
+        assertEquals(0, direct.getSubEntities().size());
     }
 
     /**

Added: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/testdo/inherit/BaseEntity.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/testdo/inherit/BaseEntity.java?rev=642071&view=auto
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/testdo/inherit/BaseEntity.java (added)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/testdo/inherit/BaseEntity.java Thu Mar 27 19:35:28 2008
@@ -0,0 +1,25 @@
+/*****************************************************************
+ *   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.cayenne.testdo.inherit;
+
+import org.apache.cayenne.testdo.inherit.auto._BaseEntity;
+
+public class BaseEntity extends _BaseEntity {
+
+}

Added: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/testdo/inherit/DirectToSubEntity.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/testdo/inherit/DirectToSubEntity.java?rev=642071&view=auto
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/testdo/inherit/DirectToSubEntity.java (added)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/testdo/inherit/DirectToSubEntity.java Thu Mar 27 19:35:28 2008
@@ -0,0 +1,25 @@
+/*****************************************************************
+ *   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.cayenne.testdo.inherit;
+
+import org.apache.cayenne.testdo.inherit.auto._DirectToSubEntity;
+
+public class DirectToSubEntity extends _DirectToSubEntity {
+
+}

Added: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/testdo/inherit/RelatedEntity.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/testdo/inherit/RelatedEntity.java?rev=642071&view=auto
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/testdo/inherit/RelatedEntity.java (added)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/testdo/inherit/RelatedEntity.java Thu Mar 27 19:35:28 2008
@@ -0,0 +1,25 @@
+/*****************************************************************
+ *   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.cayenne.testdo.inherit;
+
+import org.apache.cayenne.testdo.inherit.auto._RelatedEntity;
+
+public class RelatedEntity extends _RelatedEntity {
+
+}

Added: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/testdo/inherit/SubEntity.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/testdo/inherit/SubEntity.java?rev=642071&view=auto
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/testdo/inherit/SubEntity.java (added)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/testdo/inherit/SubEntity.java Thu Mar 27 19:35:28 2008
@@ -0,0 +1,25 @@
+/*****************************************************************
+ *   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.cayenne.testdo.inherit;
+
+import org.apache.cayenne.testdo.inherit.auto._SubEntity;
+
+public class SubEntity extends _SubEntity {
+
+}

Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/testdo/inherit/auto/_AbstractPerson.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/testdo/inherit/auto/_AbstractPerson.java?rev=642071&r1=642070&r2=642071&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/testdo/inherit/auto/_AbstractPerson.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/testdo/inherit/auto/_AbstractPerson.java Thu Mar 27 19:35:28 2008
@@ -1,11 +1,14 @@
 package org.apache.cayenne.testdo.inherit.auto;
 
-/** Class _AbstractPerson was generated by Cayenne.
-  * It is probably a good idea to avoid changing this class manually, 
-  * since it may be overwritten next time code is regenerated. 
-  * If you need to make any customizations, please use subclass. 
-  */
-public class _AbstractPerson extends org.apache.cayenne.CayenneDataObject {
+import org.apache.cayenne.CayenneDataObject;
+
+/**
+ * Class _AbstractPerson was generated by Cayenne.
+ * It is probably a good idea to avoid changing this class manually,
+ * since it may be overwritten next time code is regenerated.
+ * If you need to make any customizations, please use subclass.
+ */
+public abstract class _AbstractPerson extends CayenneDataObject {
 
     public static final String NAME_PROPERTY = "name";
     public static final String PERSON_TYPE_PROPERTY = "personType";
@@ -18,14 +21,12 @@
     public String getName() {
         return (String)readProperty("name");
     }
-    
-    
+
     public void setPersonType(String personType) {
         writeProperty("personType", personType);
     }
     public String getPersonType() {
         return (String)readProperty("personType");
     }
-    
-    
+
 }

Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/testdo/inherit/auto/_Address.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/testdo/inherit/auto/_Address.java?rev=642071&r1=642070&r2=642071&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/testdo/inherit/auto/_Address.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/testdo/inherit/auto/_Address.java Thu Mar 27 19:35:28 2008
@@ -11,18 +11,10 @@
  */
 public abstract class _Address extends CayenneDataObject {
 
-    public static final String ADDRESS_TYPE_PROPERTY = "addressType";
     public static final String CITY_PROPERTY = "city";
     public static final String TO_EMPLOYEE_PROPERTY = "toEmployee";
 
     public static final String ADDRESS_ID_PK_COLUMN = "ADDRESS_ID";
-
-    public void setAddressType(String addressType) {
-        writeProperty("addressType", addressType);
-    }
-    public String getAddressType() {
-        return (String)readProperty("addressType");
-    }
 
     public void setCity(String city) {
         writeProperty("city", city);

Added: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/testdo/inherit/auto/_BaseEntity.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/testdo/inherit/auto/_BaseEntity.java?rev=642071&view=auto
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/testdo/inherit/auto/_BaseEntity.java (added)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/testdo/inherit/auto/_BaseEntity.java Thu Mar 27 19:35:28 2008
@@ -0,0 +1,46 @@
+package org.apache.cayenne.testdo.inherit.auto;
+
+import org.apache.cayenne.CayenneDataObject;
+import org.apache.cayenne.testdo.inherit.DirectToSubEntity;
+import org.apache.cayenne.testdo.inherit.RelatedEntity;
+
+/**
+ * Class _BaseEntity was generated by Cayenne.
+ * It is probably a good idea to avoid changing this class manually,
+ * since it may be overwritten next time code is regenerated.
+ * If you need to make any customizations, please use subclass.
+ */
+public abstract class _BaseEntity extends CayenneDataObject {
+
+    public static final String ENTITY_TYPE_PROPERTY = "entityType";
+    public static final String TO_DIRECT_TO_SUB_ENTITY_PROPERTY = "toDirectToSubEntity";
+    public static final String TO_RELATED_ENTITY_PROPERTY = "toRelatedEntity";
+
+    public static final String BASE_ENTITY_ID_PK_COLUMN = "BASE_ENTITY_ID";
+
+    public void setEntityType(String entityType) {
+        writeProperty("entityType", entityType);
+    }
+    public String getEntityType() {
+        return (String)readProperty("entityType");
+    }
+
+    public void setToDirectToSubEntity(DirectToSubEntity toDirectToSubEntity) {
+        setToOneTarget("toDirectToSubEntity", toDirectToSubEntity, true);
+    }
+
+    public DirectToSubEntity getToDirectToSubEntity() {
+        return (DirectToSubEntity)readProperty("toDirectToSubEntity");
+    }
+
+
+    public void setToRelatedEntity(RelatedEntity toRelatedEntity) {
+        setToOneTarget("toRelatedEntity", toRelatedEntity, true);
+    }
+
+    public RelatedEntity getToRelatedEntity() {
+        return (RelatedEntity)readProperty("toRelatedEntity");
+    }
+
+
+}

Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/testdo/inherit/auto/_ClientCompany.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/testdo/inherit/auto/_ClientCompany.java?rev=642071&r1=642070&r2=642071&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/testdo/inherit/auto/_ClientCompany.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/testdo/inherit/auto/_ClientCompany.java Thu Mar 27 19:35:28 2008
@@ -2,12 +2,16 @@
 
 import java.util.List;
 
-/** Class _ClientCompany was generated by Cayenne.
-  * It is probably a good idea to avoid changing this class manually, 
-  * since it may be overwritten next time code is regenerated. 
-  * If you need to make any customizations, please use subclass. 
-  */
-public class _ClientCompany extends org.apache.cayenne.CayenneDataObject {
+import org.apache.cayenne.CayenneDataObject;
+import org.apache.cayenne.testdo.inherit.CustomerRepresentative;
+
+/**
+ * Class _ClientCompany was generated by Cayenne.
+ * It is probably a good idea to avoid changing this class manually,
+ * since it may be overwritten next time code is regenerated.
+ * If you need to make any customizations, please use subclass.
+ */
+public abstract class _ClientCompany extends CayenneDataObject {
 
     public static final String NAME_PROPERTY = "name";
     public static final String REPRESENTATIVES_PROPERTY = "representatives";
@@ -20,17 +24,17 @@
     public String getName() {
         return (String)readProperty("name");
     }
-    
-    
-    public void addToRepresentatives(org.apache.cayenne.testdo.inherit.CustomerRepresentative obj) {
+
+    public void addToRepresentatives(CustomerRepresentative obj) {
         addToManyTarget("representatives", obj, true);
     }
-    public void removeFromRepresentatives(org.apache.cayenne.testdo.inherit.CustomerRepresentative obj) {
+    public void removeFromRepresentatives(CustomerRepresentative obj) {
         removeToManyTarget("representatives", obj, true);
     }
-    public List getRepresentatives() {
-        return (List)readProperty("representatives");
+    @SuppressWarnings("unchecked")
+    public List<CustomerRepresentative> getRepresentatives() {
+        return (List<CustomerRepresentative>)readProperty("representatives");
     }
-    
-    
+
+
 }

Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/testdo/inherit/auto/_CustomerRepresentative.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/testdo/inherit/auto/_CustomerRepresentative.java?rev=642071&r1=642070&r2=642071&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/testdo/inherit/auto/_CustomerRepresentative.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/testdo/inherit/auto/_CustomerRepresentative.java Thu Mar 27 19:35:28 2008
@@ -1,11 +1,15 @@
 package org.apache.cayenne.testdo.inherit.auto;
 
-/** Class _CustomerRepresentative was generated by Cayenne.
-  * It is probably a good idea to avoid changing this class manually, 
-  * since it may be overwritten next time code is regenerated. 
-  * If you need to make any customizations, please use subclass. 
-  */
-public class _CustomerRepresentative extends org.apache.cayenne.testdo.inherit.AbstractPerson {
+import org.apache.cayenne.testdo.inherit.AbstractPerson;
+import org.apache.cayenne.testdo.inherit.ClientCompany;
+
+/**
+ * Class _CustomerRepresentative was generated by Cayenne.
+ * It is probably a good idea to avoid changing this class manually,
+ * since it may be overwritten next time code is regenerated.
+ * If you need to make any customizations, please use subclass.
+ */
+public abstract class _CustomerRepresentative extends AbstractPerson {
 
     public static final String CLIENT_CONTACT_TYPE_PROPERTY = "clientContactType";
     public static final String TO_CLIENT_COMPANY_PROPERTY = "toClientCompany";
@@ -18,15 +22,14 @@
     public String getClientContactType() {
         return (String)readProperty("clientContactType");
     }
-    
-    
-    public void setToClientCompany(org.apache.cayenne.testdo.inherit.ClientCompany toClientCompany) {
+
+    public void setToClientCompany(ClientCompany toClientCompany) {
         setToOneTarget("toClientCompany", toClientCompany, true);
     }
 
-    public org.apache.cayenne.testdo.inherit.ClientCompany getToClientCompany() {
-        return (org.apache.cayenne.testdo.inherit.ClientCompany)readProperty("toClientCompany");
-    } 
-    
-    
+    public ClientCompany getToClientCompany() {
+        return (ClientCompany)readProperty("toClientCompany");
+    }
+
+
 }

Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/testdo/inherit/auto/_Department.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/testdo/inherit/auto/_Department.java?rev=642071&r1=642070&r2=642071&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/testdo/inherit/auto/_Department.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/testdo/inherit/auto/_Department.java Thu Mar 27 19:35:28 2008
@@ -2,12 +2,17 @@
 
 import java.util.List;
 
-/** Class _Department was generated by Cayenne.
-  * It is probably a good idea to avoid changing this class manually, 
-  * since it may be overwritten next time code is regenerated. 
-  * If you need to make any customizations, please use subclass. 
-  */
-public class _Department extends org.apache.cayenne.CayenneDataObject {
+import org.apache.cayenne.CayenneDataObject;
+import org.apache.cayenne.testdo.inherit.Employee;
+import org.apache.cayenne.testdo.inherit.Manager;
+
+/**
+ * Class _Department was generated by Cayenne.
+ * It is probably a good idea to avoid changing this class manually,
+ * since it may be overwritten next time code is regenerated.
+ * If you need to make any customizations, please use subclass.
+ */
+public abstract class _Department extends CayenneDataObject {
 
     public static final String NAME_PROPERTY = "name";
     public static final String EMPLOYEES_PROPERTY = "employees";
@@ -21,26 +26,26 @@
     public String getName() {
         return (String)readProperty("name");
     }
-    
-    
-    public void addToEmployees(org.apache.cayenne.testdo.inherit.Employee obj) {
+
+    public void addToEmployees(Employee obj) {
         addToManyTarget("employees", obj, true);
     }
-    public void removeFromEmployees(org.apache.cayenne.testdo.inherit.Employee obj) {
+    public void removeFromEmployees(Employee obj) {
         removeToManyTarget("employees", obj, true);
     }
-    public List getEmployees() {
-        return (List)readProperty("employees");
+    @SuppressWarnings("unchecked")
+    public List<Employee> getEmployees() {
+        return (List<Employee>)readProperty("employees");
     }
-    
-    
-    public void setToManager(org.apache.cayenne.testdo.inherit.Manager toManager) {
+
+
+    public void setToManager(Manager toManager) {
         setToOneTarget("toManager", toManager, true);
     }
 
-    public org.apache.cayenne.testdo.inherit.Manager getToManager() {
-        return (org.apache.cayenne.testdo.inherit.Manager)readProperty("toManager");
-    } 
-    
-    
+    public Manager getToManager() {
+        return (Manager)readProperty("toManager");
+    }
+
+
 }

Added: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/testdo/inherit/auto/_DirectToSubEntity.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/testdo/inherit/auto/_DirectToSubEntity.java?rev=642071&view=auto
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/testdo/inherit/auto/_DirectToSubEntity.java (added)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/testdo/inherit/auto/_DirectToSubEntity.java Thu Mar 27 19:35:28 2008
@@ -0,0 +1,32 @@
+package org.apache.cayenne.testdo.inherit.auto;
+
+import java.util.List;
+
+import org.apache.cayenne.CayenneDataObject;
+import org.apache.cayenne.testdo.inherit.SubEntity;
+
+/**
+ * Class _DirectToSubEntity was generated by Cayenne.
+ * It is probably a good idea to avoid changing this class manually,
+ * since it may be overwritten next time code is regenerated.
+ * If you need to make any customizations, please use subclass.
+ */
+public abstract class _DirectToSubEntity extends CayenneDataObject {
+
+    public static final String SUB_ENTITIES_PROPERTY = "subEntities";
+
+    public static final String ID_PK_COLUMN = "ID";
+
+    public void addToSubEntities(SubEntity obj) {
+        addToManyTarget("subEntities", obj, true);
+    }
+    public void removeFromSubEntities(SubEntity obj) {
+        removeToManyTarget("subEntities", obj, true);
+    }
+    @SuppressWarnings("unchecked")
+    public List<SubEntity> getSubEntities() {
+        return (List<SubEntity>)readProperty("subEntities");
+    }
+
+
+}

Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/testdo/inherit/auto/_Employee.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/testdo/inherit/auto/_Employee.java?rev=642071&r1=642070&r2=642071&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/testdo/inherit/auto/_Employee.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/testdo/inherit/auto/_Employee.java Thu Mar 27 19:35:28 2008
@@ -5,7 +5,6 @@
 import org.apache.cayenne.testdo.inherit.AbstractPerson;
 import org.apache.cayenne.testdo.inherit.Address;
 import org.apache.cayenne.testdo.inherit.Department;
-import org.apache.cayenne.testdo.inherit.HomeAddress;
 
 /**
  * Class _Employee was generated by Cayenne.
@@ -17,7 +16,6 @@
 
     public static final String SALARY_PROPERTY = "salary";
     public static final String ADDRESSES_PROPERTY = "addresses";
-    public static final String HOME_ADDRESSES_PROPERTY = "homeAddresses";
     public static final String TO_DEPARTMENT_PROPERTY = "toDepartment";
 
     public static final String PERSON_ID_PK_COLUMN = "PERSON_ID";
@@ -38,18 +36,6 @@
     @SuppressWarnings("unchecked")
     public List<Address> getAddresses() {
         return (List<Address>)readProperty("addresses");
-    }
-
-
-    public void addToHomeAddresses(HomeAddress obj) {
-        addToManyTarget("homeAddresses", obj, true);
-    }
-    public void removeFromHomeAddresses(HomeAddress obj) {
-        removeToManyTarget("homeAddresses", obj, true);
-    }
-    @SuppressWarnings("unchecked")
-    public List<HomeAddress> getHomeAddresses() {
-        return (List<HomeAddress>)readProperty("homeAddresses");
     }
 
 

Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/testdo/inherit/auto/_Manager.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/testdo/inherit/auto/_Manager.java?rev=642071&r1=642070&r2=642071&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/testdo/inherit/auto/_Manager.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/testdo/inherit/auto/_Manager.java Thu Mar 27 19:35:28 2008
@@ -2,26 +2,31 @@
 
 import java.util.List;
 
-/** Class _Manager was generated by Cayenne.
-  * It is probably a good idea to avoid changing this class manually, 
-  * since it may be overwritten next time code is regenerated. 
-  * If you need to make any customizations, please use subclass. 
-  */
-public class _Manager extends org.apache.cayenne.testdo.inherit.Employee {
+import org.apache.cayenne.testdo.inherit.Department;
+import org.apache.cayenne.testdo.inherit.Employee;
+
+/**
+ * Class _Manager was generated by Cayenne.
+ * It is probably a good idea to avoid changing this class manually,
+ * since it may be overwritten next time code is regenerated.
+ * If you need to make any customizations, please use subclass.
+ */
+public abstract class _Manager extends Employee {
 
     public static final String MANAGED_DEPARTMENTS_PROPERTY = "managedDepartments";
 
     public static final String PERSON_ID_PK_COLUMN = "PERSON_ID";
 
-    public void addToManagedDepartments(org.apache.cayenne.testdo.inherit.Department obj) {
+    public void addToManagedDepartments(Department obj) {
         addToManyTarget("managedDepartments", obj, true);
     }
-    public void removeFromManagedDepartments(org.apache.cayenne.testdo.inherit.Department obj) {
+    public void removeFromManagedDepartments(Department obj) {
         removeToManyTarget("managedDepartments", obj, true);
     }
-    public List getManagedDepartments() {
-        return (List)readProperty("managedDepartments");
+    @SuppressWarnings("unchecked")
+    public List<Department> getManagedDepartments() {
+        return (List<Department>)readProperty("managedDepartments");
     }
-    
-    
+
+
 }

Added: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/testdo/inherit/auto/_RelatedEntity.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/testdo/inherit/auto/_RelatedEntity.java?rev=642071&view=auto
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/testdo/inherit/auto/_RelatedEntity.java (added)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/testdo/inherit/auto/_RelatedEntity.java Thu Mar 27 19:35:28 2008
@@ -0,0 +1,46 @@
+package org.apache.cayenne.testdo.inherit.auto;
+
+import java.util.List;
+
+import org.apache.cayenne.CayenneDataObject;
+import org.apache.cayenne.testdo.inherit.BaseEntity;
+import org.apache.cayenne.testdo.inherit.SubEntity;
+
+/**
+ * Class _RelatedEntity was generated by Cayenne.
+ * It is probably a good idea to avoid changing this class manually,
+ * since it may be overwritten next time code is regenerated.
+ * If you need to make any customizations, please use subclass.
+ */
+public abstract class _RelatedEntity extends CayenneDataObject {
+
+    public static final String BASE_ENTITIES_PROPERTY = "baseEntities";
+    public static final String SUB_ENTITIES_PROPERTY = "subEntities";
+
+    public static final String RELATED_ENTITY_ID_PK_COLUMN = "RELATED_ENTITY_ID";
+
+    public void addToBaseEntities(BaseEntity obj) {
+        addToManyTarget("baseEntities", obj, true);
+    }
+    public void removeFromBaseEntities(BaseEntity obj) {
+        removeToManyTarget("baseEntities", obj, true);
+    }
+    @SuppressWarnings("unchecked")
+    public List<BaseEntity> getBaseEntities() {
+        return (List<BaseEntity>)readProperty("baseEntities");
+    }
+
+
+    public void addToSubEntities(SubEntity obj) {
+        addToManyTarget("subEntities", obj, true);
+    }
+    public void removeFromSubEntities(SubEntity obj) {
+        removeToManyTarget("subEntities", obj, true);
+    }
+    @SuppressWarnings("unchecked")
+    public List<SubEntity> getSubEntities() {
+        return (List<SubEntity>)readProperty("subEntities");
+    }
+
+
+}

Added: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/testdo/inherit/auto/_SubEntity.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/testdo/inherit/auto/_SubEntity.java?rev=642071&view=auto
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/testdo/inherit/auto/_SubEntity.java (added)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/testdo/inherit/auto/_SubEntity.java Thu Mar 27 19:35:28 2008
@@ -0,0 +1,16 @@
+package org.apache.cayenne.testdo.inherit.auto;
+
+import org.apache.cayenne.testdo.inherit.BaseEntity;
+
+/**
+ * Class _SubEntity was generated by Cayenne.
+ * It is probably a good idea to avoid changing this class manually,
+ * since it may be overwritten next time code is regenerated.
+ * If you need to make any customizations, please use subclass.
+ */
+public abstract class _SubEntity extends BaseEntity {
+
+
+    public static final String BASE_ENTITY_ID_PK_COLUMN = "BASE_ENTITY_ID";
+
+}

Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/resources/people.map.xml
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/resources/people.map.xml?rev=642071&r1=642070&r2=642071&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/resources/people.map.xml (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/resources/people.map.xml Thu Mar 27 19:35:28 2008
@@ -3,10 +3,15 @@
 	<property name="defaultPackage" value="org.apache.cayenne.testdo.inherit"/>
 	<db-entity name="ADDRESS">
 		<db-attribute name="ADDRESS_ID" type="INTEGER" isPrimaryKey="true" isMandatory="true"/>
-		<db-attribute name="ADDRESS_TYPE" type="VARCHAR" length="2"/>
 		<db-attribute name="CITY" type="VARCHAR" length="100"/>
 		<db-attribute name="PERSON_ID" type="INTEGER" isMandatory="true"/>
 	</db-entity>
+	<db-entity name="BASE_ENTITY">
+		<db-attribute name="BASE_ENTITY_ID" type="INTEGER" isPrimaryKey="true" isMandatory="true"/>
+		<db-attribute name="DIRECT_TO_SUB_ENTITY_ID" type="INTEGER"/>
+		<db-attribute name="ENTITY_TYPE" type="VARCHAR" length="255"/>
+		<db-attribute name="RELATED_ENTITY_ID" type="INTEGER" isMandatory="true"/>
+	</db-entity>
 	<db-entity name="CLIENT_COMPANY">
 		<db-attribute name="CLIENT_COMPANY_ID" type="INTEGER" isPrimaryKey="true" isMandatory="true"/>
 		<db-attribute name="NAME" type="VARCHAR" length="100"/>
@@ -16,6 +21,9 @@
 		<db-attribute name="MANAGER_ID" type="INTEGER"/>
 		<db-attribute name="NAME" type="VARCHAR" isMandatory="true" length="100"/>
 	</db-entity>
+	<db-entity name="DIRECT_TO_SUB_ENTITY">
+		<db-attribute name="ID" type="INTEGER" isPrimaryKey="true" isMandatory="true"/>
+	</db-entity>
 	<db-entity name="PERSON">
 		<db-attribute name="CLIENT_COMPANY_ID" type="INTEGER"/>
 		<db-attribute name="CLIENT_CONTACT_TYPE" type="VARCHAR" length="50"/>
@@ -25,16 +33,19 @@
 		<db-attribute name="PERSON_TYPE" type="CHAR" isMandatory="true" length="2"/>
 		<db-attribute name="SALARY" type="FLOAT"/>
 	</db-entity>
+	<db-entity name="RELATED_ENTITY">
+		<db-attribute name="RELATED_ENTITY_ID" type="INTEGER" isPrimaryKey="true" isMandatory="true"/>
+	</db-entity>
 	<obj-entity name="AbstractPerson" className="org.apache.cayenne.testdo.inherit.AbstractPerson" dbEntityName="PERSON">
-		<obj-attribute name="clientContactType" type="java.lang.String" db-attribute-path="CLIENT_CONTACT_TYPE"/>
 		<obj-attribute name="name" type="java.lang.String" db-attribute-path="NAME"/>
 		<obj-attribute name="personType" type="java.lang.String" db-attribute-path="PERSON_TYPE"/>
-		<obj-attribute name="salary" type="java.lang.Float" db-attribute-path="SALARY"/>
 	</obj-entity>
 	<obj-entity name="Address" className="org.apache.cayenne.testdo.inherit.Address" dbEntityName="ADDRESS">
-		<obj-attribute name="addressType" type="java.lang.String" db-attribute-path="ADDRESS_TYPE"/>
 		<obj-attribute name="city" type="java.lang.String" db-attribute-path="CITY"/>
 	</obj-entity>
+	<obj-entity name="BaseEntity" className="org.apache.cayenne.testdo.inherit.BaseEntity" dbEntityName="BASE_ENTITY">
+		<obj-attribute name="entityType" type="java.lang.String" db-attribute-path="ENTITY_TYPE"/>
+	</obj-entity>
 	<obj-entity name="ClientCompany" className="org.apache.cayenne.testdo.inherit.ClientCompany" dbEntityName="CLIENT_COMPANY">
 		<obj-attribute name="name" type="java.lang.String" db-attribute-path="NAME"/>
 	</obj-entity>
@@ -45,18 +56,29 @@
 	<obj-entity name="Department" className="org.apache.cayenne.testdo.inherit.Department" dbEntityName="DEPARTMENT">
 		<obj-attribute name="name" type="java.lang.String" db-attribute-path="NAME"/>
 	</obj-entity>
+	<obj-entity name="DirectToSubEntity" className="org.apache.cayenne.testdo.inherit.DirectToSubEntity" dbEntityName="DIRECT_TO_SUB_ENTITY">
+	</obj-entity>
 	<obj-entity name="Employee" superEntityName="AbstractPerson" className="org.apache.cayenne.testdo.inherit.Employee">
 		<qualifier><![CDATA[personType = "EE"]]></qualifier>
 		<obj-attribute name="salary" type="java.lang.Float" db-attribute-path="SALARY"/>
 	</obj-entity>
-	<obj-entity name="HomeAddress" superEntityName="Address" className="org.apache.cayenne.testdo.inherit.HomeAddress">
-	</obj-entity>
 	<obj-entity name="Manager" superEntityName="Employee" className="org.apache.cayenne.testdo.inherit.Manager">
 		<qualifier><![CDATA[personType = "EM"]]></qualifier>
 	</obj-entity>
+	<obj-entity name="RelatedEntity" className="org.apache.cayenne.testdo.inherit.RelatedEntity" dbEntityName="RELATED_ENTITY">
+	</obj-entity>
+	<obj-entity name="SubEntity" superEntityName="BaseEntity" className="org.apache.cayenne.testdo.inherit.SubEntity">
+		<qualifier><![CDATA[entityType = "sub"]]></qualifier>
+	</obj-entity>
 	<db-relationship name="toPerson" source="ADDRESS" target="PERSON" toMany="false">
 		<db-attribute-pair source="PERSON_ID" target="PERSON_ID"/>
 	</db-relationship>
+	<db-relationship name="directToSubEntities" source="BASE_ENTITY" target="DIRECT_TO_SUB_ENTITY" toMany="false">
+		<db-attribute-pair source="DIRECT_TO_SUB_ENTITY_ID" target="ID"/>
+	</db-relationship>
+	<db-relationship name="relatedEntities" source="BASE_ENTITY" target="RELATED_ENTITY" toMany="false">
+		<db-attribute-pair source="RELATED_ENTITY_ID" target="RELATED_ENTITY_ID"/>
+	</db-relationship>
 	<db-relationship name="representatives" source="CLIENT_COMPANY" target="PERSON" toMany="true">
 		<db-attribute-pair source="CLIENT_COMPANY_ID" target="CLIENT_COMPANY_ID"/>
 	</db-relationship>
@@ -66,6 +88,9 @@
 	<db-relationship name="toManager" source="DEPARTMENT" target="PERSON" toMany="false">
 		<db-attribute-pair source="MANAGER_ID" target="PERSON_ID"/>
 	</db-relationship>
+	<db-relationship name="subEntity" source="DIRECT_TO_SUB_ENTITY" target="BASE_ENTITY" toMany="true">
+		<db-attribute-pair source="ID" target="DIRECT_TO_SUB_ENTITY_ID"/>
+	</db-relationship>
 	<db-relationship name="employeeAddresses" source="PERSON" target="ADDRESS" toMany="true">
 		<db-attribute-pair source="PERSON_ID" target="PERSON_ID"/>
 	</db-relationship>
@@ -78,14 +103,20 @@
 	<db-relationship name="toDepartment" source="PERSON" target="DEPARTMENT" toMany="false">
 		<db-attribute-pair source="DEPARTMENT_ID" target="DEPARTMENT_ID"/>
 	</db-relationship>
-	<obj-relationship name="toClientCompany" source="AbstractPerson" target="ClientCompany" deleteRule="Nullify" db-relationship-path="toClientCompany"/>
+	<db-relationship name="entities" source="RELATED_ENTITY" target="BASE_ENTITY" toMany="true">
+		<db-attribute-pair source="RELATED_ENTITY_ID" target="RELATED_ENTITY_ID"/>
+	</db-relationship>
 	<obj-relationship name="toEmployee" source="Address" target="Employee" db-relationship-path="toPerson"/>
+	<obj-relationship name="toDirectToSubEntity" source="BaseEntity" target="DirectToSubEntity" deleteRule="Nullify" db-relationship-path="directToSubEntities"/>
+	<obj-relationship name="toRelatedEntity" source="BaseEntity" target="RelatedEntity" deleteRule="Nullify" db-relationship-path="relatedEntities"/>
 	<obj-relationship name="representatives" source="ClientCompany" target="CustomerRepresentative" db-relationship-path="representatives"/>
-	<obj-relationship name="toClientCompany" source="CustomerRepresentative" target="ClientCompany" deleteRule="Nullify" db-relationship-path="toClientCompany"/>
+	<obj-relationship name="toClientCompany" source="CustomerRepresentative" target="ClientCompany" db-relationship-path="toClientCompany"/>
 	<obj-relationship name="employees" source="Department" target="Employee" db-relationship-path="employees"/>
 	<obj-relationship name="toManager" source="Department" target="Manager" db-relationship-path="toManager"/>
+	<obj-relationship name="subEntities" source="DirectToSubEntity" target="SubEntity" db-relationship-path="subEntity"/>
 	<obj-relationship name="addresses" source="Employee" target="Address" db-relationship-path="employeeAddresses"/>
-	<obj-relationship name="homeAddresses" source="Employee" target="HomeAddress" db-relationship-path="employeeAddresses"/>
 	<obj-relationship name="toDepartment" source="Employee" target="Department" db-relationship-path="toDepartment"/>
 	<obj-relationship name="managedDepartments" source="Manager" target="Department" db-relationship-path="managedDepartments"/>
+	<obj-relationship name="baseEntities" source="RelatedEntity" target="BaseEntity" db-relationship-path="entities"/>
+	<obj-relationship name="subEntities" source="RelatedEntity" target="SubEntity" db-relationship-path="entities"/>
 </data-map>