You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cayenne.apache.org by nt...@apache.org on 2017/03/10 07:27:22 UTC

[1/3] cayenne git commit: CAY-2256 Cannot Save/Insert an Object With null Flattened (complex) toOne Relationship

Repository: cayenne
Updated Branches:
  refs/heads/master 458fb96b4 -> cf9d83b4a


CAY-2256 Cannot Save/Insert an Object With null Flattened (complex) toOne Relationship


Project: http://git-wip-us.apache.org/repos/asf/cayenne/repo
Commit: http://git-wip-us.apache.org/repos/asf/cayenne/commit/007dc276
Tree: http://git-wip-us.apache.org/repos/asf/cayenne/tree/007dc276
Diff: http://git-wip-us.apache.org/repos/asf/cayenne/diff/007dc276

Branch: refs/heads/master
Commit: 007dc276e3ecfa2f5dbee2be7b832decc7e77477
Parents: 448c540
Author: Matt Watson <ma...@swarmbox.biz>
Authored: Mon Mar 6 12:03:02 2017 -0800
Committer: Matt Watson <ma...@swarmbox.biz>
Committed: Mon Mar 6 12:03:02 2017 -0800

----------------------------------------------------------------------
 .../org/apache/cayenne/CayenneDataObject.java   |  2 +-
 .../cayenne/FlattenedRelationshipsIT.java       | 47 ++++++++++++++++++--
 .../relationships_flattened/FlattenedTest5.java |  7 +++
 .../auto/_FlattenedTest1.java                   | 14 ++++++
 .../auto/_FlattenedTest5.java                   | 38 ++++++++++++++++
 .../resources/relationships-flattened.map.xml   | 26 +++++++++++
 6 files changed, 129 insertions(+), 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cayenne/blob/007dc276/cayenne-server/src/main/java/org/apache/cayenne/CayenneDataObject.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/CayenneDataObject.java b/cayenne-server/src/main/java/org/apache/cayenne/CayenneDataObject.java
index 401f14b..5e929f3 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/CayenneDataObject.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/CayenneDataObject.java
@@ -667,7 +667,7 @@ public class CayenneDataObject extends PersistentObject implements DataObject, V
 				continue;
 			}
 
-			if (dbRels.size() > 1 && (relationship.isToMany() || relationship.isReadOnly())) {
+			if (dbRels.size() > 1 && (!relationship.isToDependentEntity() || relationship.isReadOnly())) {
 				continue;
 			}
 

http://git-wip-us.apache.org/repos/asf/cayenne/blob/007dc276/cayenne-server/src/test/java/org/apache/cayenne/FlattenedRelationshipsIT.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/test/java/org/apache/cayenne/FlattenedRelationshipsIT.java b/cayenne-server/src/test/java/org/apache/cayenne/FlattenedRelationshipsIT.java
index 000e073..7a10d10 100644
--- a/cayenne-server/src/test/java/org/apache/cayenne/FlattenedRelationshipsIT.java
+++ b/cayenne-server/src/test/java/org/apache/cayenne/FlattenedRelationshipsIT.java
@@ -23,6 +23,7 @@ import org.apache.cayenne.access.DataContext;
 import org.apache.cayenne.di.Inject;
 import org.apache.cayenne.exp.Expression;
 import org.apache.cayenne.exp.ExpressionFactory;
+import org.apache.cayenne.query.ObjectSelect;
 import org.apache.cayenne.query.SQLTemplate;
 import org.apache.cayenne.query.SelectQuery;
 import org.apache.cayenne.test.jdbc.DBHelper;
@@ -31,19 +32,18 @@ import org.apache.cayenne.testdo.relationships_flattened.FlattenedCircular;
 import org.apache.cayenne.testdo.relationships_flattened.FlattenedTest1;
 import org.apache.cayenne.testdo.relationships_flattened.FlattenedTest2;
 import org.apache.cayenne.testdo.relationships_flattened.FlattenedTest3;
+import org.apache.cayenne.testdo.relationships_flattened.FlattenedTest5;
 import org.apache.cayenne.unit.di.server.CayenneProjects;
 import org.apache.cayenne.unit.di.server.ServerCase;
 import org.apache.cayenne.unit.di.server.UseServerRuntime;
+import org.apache.cayenne.validation.ValidationResult;
 import org.junit.Before;
 import org.junit.Test;
 
 import java.sql.Types;
 import java.util.List;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertSame;
-import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.*;
 
 /**
  * Test case for objects with flattened relationships.
@@ -291,4 +291,43 @@ public class FlattenedRelationshipsIT extends ServerCase {
         assertTrue(side1s.isEmpty());
     }
 
+    /**
+     * Should be able to save/insert an object with flattened (complex) toOne relationship
+     * @throws Exception
+     */
+    @Test
+    public void testFlattenedComplexToOneRelationship() throws Exception {
+        FlattenedTest1 ft1 = context.newObject(FlattenedTest1.class);
+        ft1.setName("FT1");
+
+        FlattenedTest5 ft5 = context.newObject(FlattenedTest5.class);
+        ft5.setName("FT5");
+        ft5.setToFT1(ft1);
+
+        context.commitChanges();
+
+        FlattenedTest5 ft5Persisted = ObjectSelect.query(FlattenedTest5.class).selectFirst(context);
+        assertEquals(ft1, ft5Persisted.getToFT1());
+    }
+
+    /**
+     * Should be able to save/insert an object with null flattened (complex) toOne relationship
+     * @throws Exception
+     */
+    @Test
+    public void testNullFlattenedComplexToOneRelationship() throws Exception {
+        FlattenedTest5 ft5 = context.newObject(FlattenedTest5.class);
+        ft5.setName("FT5");
+
+        // should be valid for save
+        ValidationResult validationResult = new ValidationResult();
+        ft5.validateForSave(validationResult);
+
+        assertTrue(validationResult.toString(), validationResult.getFailures().isEmpty());
+
+        context.commitChanges();
+
+        assertEquals(1, ObjectSelect.query(FlattenedTest5.class).selectCount(context));
+    }
+
 }

http://git-wip-us.apache.org/repos/asf/cayenne/blob/007dc276/cayenne-server/src/test/java/org/apache/cayenne/testdo/relationships_flattened/FlattenedTest5.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/test/java/org/apache/cayenne/testdo/relationships_flattened/FlattenedTest5.java b/cayenne-server/src/test/java/org/apache/cayenne/testdo/relationships_flattened/FlattenedTest5.java
new file mode 100644
index 0000000..d2ad619
--- /dev/null
+++ b/cayenne-server/src/test/java/org/apache/cayenne/testdo/relationships_flattened/FlattenedTest5.java
@@ -0,0 +1,7 @@
+package org.apache.cayenne.testdo.relationships_flattened;
+
+import org.apache.cayenne.testdo.relationships_flattened.auto._FlattenedTest5;
+
+public class FlattenedTest5 extends _FlattenedTest5 {
+
+}

http://git-wip-us.apache.org/repos/asf/cayenne/blob/007dc276/cayenne-server/src/test/java/org/apache/cayenne/testdo/relationships_flattened/auto/_FlattenedTest1.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/test/java/org/apache/cayenne/testdo/relationships_flattened/auto/_FlattenedTest1.java b/cayenne-server/src/test/java/org/apache/cayenne/testdo/relationships_flattened/auto/_FlattenedTest1.java
index 15c551c..a215d50 100644
--- a/cayenne-server/src/test/java/org/apache/cayenne/testdo/relationships_flattened/auto/_FlattenedTest1.java
+++ b/cayenne-server/src/test/java/org/apache/cayenne/testdo/relationships_flattened/auto/_FlattenedTest1.java
@@ -7,6 +7,7 @@ import org.apache.cayenne.exp.Property;
 import org.apache.cayenne.testdo.relationships_flattened.FlattenedTest2;
 import org.apache.cayenne.testdo.relationships_flattened.FlattenedTest3;
 import org.apache.cayenne.testdo.relationships_flattened.FlattenedTest4;
+import org.apache.cayenne.testdo.relationships_flattened.FlattenedTest5;
 
 /**
  * Class _FlattenedTest1 was generated by Cayenne.
@@ -25,6 +26,7 @@ public abstract class _FlattenedTest1 extends CayenneDataObject {
     public static final Property<List<FlattenedTest3>> FT3ARRAY = Property.create("ft3Array", List.class);
     public static final Property<List<FlattenedTest3>> FT3OVER_COMPLEX = Property.create("ft3OverComplex", List.class);
     public static final Property<List<FlattenedTest4>> FT4ARRAY_FOR1 = Property.create("ft4ArrayFor1", List.class);
+    public static final Property<List<FlattenedTest5>> FT5ARRAY = Property.create("ft5Array", List.class);
 
     public void setName(String name) {
         writeProperty("name", name);
@@ -69,4 +71,16 @@ public abstract class _FlattenedTest1 extends CayenneDataObject {
     }
 
 
+    public void addToFt5Array(FlattenedTest5 obj) {
+        addToManyTarget("ft5Array", obj, true);
+    }
+    public void removeFromFt5Array(FlattenedTest5 obj) {
+        removeToManyTarget("ft5Array", obj, true);
+    }
+    @SuppressWarnings("unchecked")
+    public List<FlattenedTest5> getFt5Array() {
+        return (List<FlattenedTest5>)readProperty("ft5Array");
+    }
+
+
 }

http://git-wip-us.apache.org/repos/asf/cayenne/blob/007dc276/cayenne-server/src/test/java/org/apache/cayenne/testdo/relationships_flattened/auto/_FlattenedTest5.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/test/java/org/apache/cayenne/testdo/relationships_flattened/auto/_FlattenedTest5.java b/cayenne-server/src/test/java/org/apache/cayenne/testdo/relationships_flattened/auto/_FlattenedTest5.java
new file mode 100644
index 0000000..3233a3d
--- /dev/null
+++ b/cayenne-server/src/test/java/org/apache/cayenne/testdo/relationships_flattened/auto/_FlattenedTest5.java
@@ -0,0 +1,38 @@
+package org.apache.cayenne.testdo.relationships_flattened.auto;
+
+import org.apache.cayenne.CayenneDataObject;
+import org.apache.cayenne.exp.Property;
+import org.apache.cayenne.testdo.relationships_flattened.FlattenedTest1;
+
+/**
+ * Class _FlattenedTest5 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 _FlattenedTest5 extends CayenneDataObject {
+
+    private static final long serialVersionUID = 1L; 
+
+    public static final String FT5_ID_PK_COLUMN = "FT5_ID";
+
+    public static final Property<String> NAME = Property.create("name", String.class);
+    public static final Property<FlattenedTest1> TO_FT1 = Property.create("toFT1", FlattenedTest1.class);
+
+    public void setName(String name) {
+        writeProperty("name", name);
+    }
+    public String getName() {
+        return (String)readProperty("name");
+    }
+
+    public void setToFT1(FlattenedTest1 toFT1) {
+        setToOneTarget("toFT1", toFT1, true);
+    }
+
+    public FlattenedTest1 getToFT1() {
+        return (FlattenedTest1)readProperty("toFT1");
+    }
+
+
+}

http://git-wip-us.apache.org/repos/asf/cayenne/blob/007dc276/cayenne-server/src/test/resources/relationships-flattened.map.xml
----------------------------------------------------------------------
diff --git a/cayenne-server/src/test/resources/relationships-flattened.map.xml b/cayenne-server/src/test/resources/relationships-flattened.map.xml
index cc32c8f..d5a0ee5 100644
--- a/cayenne-server/src/test/resources/relationships-flattened.map.xml
+++ b/cayenne-server/src/test/resources/relationships-flattened.map.xml
@@ -10,6 +10,11 @@
 		<db-attribute name="FT3_FK" type="INTEGER"/>
 		<db-attribute name="PK" type="INTEGER" isPrimaryKey="true" isMandatory="true"/>
 	</db-entity>
+	<db-entity name="COMPLEX_JOIN2">
+		<db-attribute name="FT1_FK" type="INTEGER" isMandatory="true"/>
+		<db-attribute name="FT5_FK" type="INTEGER" isMandatory="true"/>
+		<db-attribute name="PK" type="INTEGER" isPrimaryKey="true" isMandatory="true"/>
+	</db-entity>
 	<db-entity name="FLATTENED_CIRCULAR">
 		<db-attribute name="ID" type="INTEGER" isPrimaryKey="true" isMandatory="true"/>
 	</db-entity>
@@ -36,6 +41,10 @@
 		<db-attribute name="FT4_ID" type="INTEGER" isPrimaryKey="true" isMandatory="true"/>
 		<db-attribute name="NAME" type="VARCHAR" isMandatory="true" length="100"/>
 	</db-entity>
+	<db-entity name="FLATTENED_TEST_5">
+		<db-attribute name="FT5_ID" type="INTEGER" isPrimaryKey="true" isMandatory="true"/>
+		<db-attribute name="NAME" type="VARCHAR" isMandatory="true" length="100"/>
+	</db-entity>
 	<obj-entity name="FlattenedCircular" className="org.apache.cayenne.testdo.relationships_flattened.FlattenedCircular" dbEntityName="FLATTENED_CIRCULAR">
 	</obj-entity>
 	<obj-entity name="FlattenedTest1" className="org.apache.cayenne.testdo.relationships_flattened.FlattenedTest1" dbEntityName="FLATTENED_TEST_1">
@@ -50,12 +59,21 @@
 	<obj-entity name="FlattenedTest4" className="org.apache.cayenne.testdo.relationships_flattened.FlattenedTest4" dbEntityName="FLATTENED_TEST_4">
 		<obj-attribute name="name" type="java.lang.String" db-attribute-path="NAME"/>
 	</obj-entity>
+	<obj-entity name="FlattenedTest5" className="org.apache.cayenne.testdo.relationships_flattened.FlattenedTest5" dbEntityName="FLATTENED_TEST_5">
+		<obj-attribute name="name" type="java.lang.String" db-attribute-path="NAME"/>
+	</obj-entity>
 	<db-relationship name="toFT1" source="COMPLEX_JOIN" target="FLATTENED_TEST_1" toMany="false">
 		<db-attribute-pair source="FT1_FK" target="FT1_ID"/>
 	</db-relationship>
 	<db-relationship name="toFT3" source="COMPLEX_JOIN" target="FLATTENED_TEST_3" toMany="false">
 		<db-attribute-pair source="FT3_FK" target="FT3_ID"/>
 	</db-relationship>
+	<db-relationship name="toFT1" source="COMPLEX_JOIN2" target="FLATTENED_TEST_1" toMany="false">
+		<db-attribute-pair source="FT1_FK" target="FT1_ID"/>
+	</db-relationship>
+	<db-relationship name="toFT5" source="COMPLEX_JOIN2" target="FLATTENED_TEST_5" toMany="false">
+		<db-attribute-pair source="FT5_FK" target="FT5_ID"/>
+	</db-relationship>
 	<db-relationship name="side1s" source="FLATTENED_CIRCULAR" target="FLATTENED_CIRCULAR_JOIN" toDependentPK="true" toMany="true">
 		<db-attribute-pair source="ID" target="SIDE2_ID"/>
 	</db-relationship>
@@ -71,6 +89,9 @@
 	<db-relationship name="complexJoins" source="FLATTENED_TEST_1" target="COMPLEX_JOIN" toMany="true">
 		<db-attribute-pair source="FT1_ID" target="FT1_FK"/>
 	</db-relationship>
+	<db-relationship name="complexJoins2" source="FLATTENED_TEST_1" target="COMPLEX_JOIN2" toMany="true">
+		<db-attribute-pair source="FT1_ID" target="FT1_FK"/>
+	</db-relationship>
 	<db-relationship name="ft2Array" source="FLATTENED_TEST_1" target="FLATTENED_TEST_2" toMany="true">
 		<db-attribute-pair source="FT1_ID" target="FT1_ID"/>
 	</db-relationship>
@@ -92,16 +113,21 @@
 	<db-relationship name="toFT3" source="FLATTENED_TEST_4" target="FLATTENED_TEST_3" toMany="false">
 		<db-attribute-pair source="FT3_ID" target="FT3_ID"/>
 	</db-relationship>
+	<db-relationship name="complexJoin2" source="FLATTENED_TEST_5" target="COMPLEX_JOIN2" toMany="false">
+		<db-attribute-pair source="FT5_ID" target="FT5_FK"/>
+	</db-relationship>
 	<obj-relationship name="side1s" source="FlattenedCircular" target="FlattenedCircular" db-relationship-path="side1s.side1"/>
 	<obj-relationship name="side2s" source="FlattenedCircular" target="FlattenedCircular" db-relationship-path="side2s.side2"/>
 	<obj-relationship name="ft2Array" source="FlattenedTest1" target="FlattenedTest2" db-relationship-path="ft2Array"/>
 	<obj-relationship name="ft3Array" source="FlattenedTest1" target="FlattenedTest3" db-relationship-path="ft2Array.ft3Array"/>
 	<obj-relationship name="ft3OverComplex" source="FlattenedTest1" target="FlattenedTest3" db-relationship-path="complexJoins.toFT3"/>
 	<obj-relationship name="ft4ArrayFor1" source="FlattenedTest1" target="FlattenedTest4" db-relationship-path="ft2Array.ft3Array.ft4Array"/>
+	<obj-relationship name="ft5Array" source="FlattenedTest1" target="FlattenedTest5" deleteRule="Deny" db-relationship-path="complexJoins2.toFT5"/>
 	<obj-relationship name="ft3Array" source="FlattenedTest2" target="FlattenedTest3" db-relationship-path="ft3Array"/>
 	<obj-relationship name="toFT1" source="FlattenedTest2" target="FlattenedTest1" db-relationship-path="toFT1"/>
 	<obj-relationship name="ft4Array" source="FlattenedTest3" target="FlattenedTest4" db-relationship-path="ft4Array"/>
 	<obj-relationship name="toFT1" source="FlattenedTest3" target="FlattenedTest1" db-relationship-path="toFT2.toFT1"/>
 	<obj-relationship name="toFT2" source="FlattenedTest3" target="FlattenedTest2" db-relationship-path="toFT2"/>
 	<obj-relationship name="toFT3" source="FlattenedTest4" target="FlattenedTest3" db-relationship-path="toFT3"/>
+	<obj-relationship name="toFT1" source="FlattenedTest5" target="FlattenedTest1" deleteRule="Nullify" db-relationship-path="complexJoin2.toFT1"/>
 </data-map>


[2/3] cayenne git commit: Merge branch 'pr/175' into asf-master

Posted by nt...@apache.org.
Merge branch 'pr/175' into asf-master


Project: http://git-wip-us.apache.org/repos/asf/cayenne/repo
Commit: http://git-wip-us.apache.org/repos/asf/cayenne/commit/c90bc93f
Tree: http://git-wip-us.apache.org/repos/asf/cayenne/tree/c90bc93f
Diff: http://git-wip-us.apache.org/repos/asf/cayenne/diff/c90bc93f

Branch: refs/heads/master
Commit: c90bc93f3324eec9295742caf91f3b503a378893
Parents: 458fb96 007dc27
Author: Nikita Timofeev <st...@gmail.com>
Authored: Fri Mar 10 10:06:25 2017 +0300
Committer: Nikita Timofeev <st...@gmail.com>
Committed: Fri Mar 10 10:06:25 2017 +0300

----------------------------------------------------------------------
 .../org/apache/cayenne/CayenneDataObject.java   |  2 +-
 .../cayenne/FlattenedRelationshipsIT.java       | 47 ++++++++++++++++++--
 .../relationships_flattened/FlattenedTest5.java |  7 +++
 .../auto/_FlattenedTest1.java                   | 14 ++++++
 .../auto/_FlattenedTest5.java                   | 38 ++++++++++++++++
 .../resources/relationships-flattened.map.xml   | 26 +++++++++++
 6 files changed, 129 insertions(+), 5 deletions(-)
----------------------------------------------------------------------



[3/3] cayenne git commit: Revert fix for https://issues.apache.org/jira/browse/CAY-2146

Posted by nt...@apache.org.
Revert fix for https://issues.apache.org/jira/browse/CAY-2146


Project: http://git-wip-us.apache.org/repos/asf/cayenne/repo
Commit: http://git-wip-us.apache.org/repos/asf/cayenne/commit/cf9d83b4
Tree: http://git-wip-us.apache.org/repos/asf/cayenne/tree/cf9d83b4
Diff: http://git-wip-us.apache.org/repos/asf/cayenne/diff/cf9d83b4

Branch: refs/heads/master
Commit: cf9d83b4a3b5bda505f0021c971af6d1b8c6f4af
Parents: c90bc93
Author: Nikita Timofeev <st...@gmail.com>
Authored: Fri Mar 10 10:26:29 2017 +0300
Committer: Nikita Timofeev <st...@gmail.com>
Committed: Fri Mar 10 10:26:29 2017 +0300

----------------------------------------------------------------------
 .../java/org/apache/cayenne/CayenneDataObject.java    |  6 +-----
 .../cayenne/testdo/inheritance_vertical/IvSub3.java   |  8 ++++++++
 .../testdo/inheritance_vertical/auto/_IvSub3.java     |  2 ++
 .../src/test/resources/inheritance-vertical.map.xml   | 14 ++++----------
 4 files changed, 15 insertions(+), 15 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cayenne/blob/cf9d83b4/cayenne-server/src/main/java/org/apache/cayenne/CayenneDataObject.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/CayenneDataObject.java b/cayenne-server/src/main/java/org/apache/cayenne/CayenneDataObject.java
index 5e929f3..0aca689 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/CayenneDataObject.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/CayenneDataObject.java
@@ -663,11 +663,7 @@ public class CayenneDataObject extends PersistentObject implements DataObject, V
 			// skip db relationships that we can't validate or that can't be invalid here
 			// can't handle paths longer than two db relationships
 			// see ObjRelationship.recalculateReadOnlyValue() for more info
-			if (dbRels.size() == 1 && relationship.isSourceIndependentFromTargetChange()) {
-				continue;
-			}
-
-			if (dbRels.size() > 1 && (!relationship.isToDependentEntity() || relationship.isReadOnly())) {
+			if (relationship.isSourceIndependentFromTargetChange()) {
 				continue;
 			}
 

http://git-wip-us.apache.org/repos/asf/cayenne/blob/cf9d83b4/cayenne-server/src/test/java/org/apache/cayenne/testdo/inheritance_vertical/IvSub3.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/test/java/org/apache/cayenne/testdo/inheritance_vertical/IvSub3.java b/cayenne-server/src/test/java/org/apache/cayenne/testdo/inheritance_vertical/IvSub3.java
index 8e3fb72..a801476 100644
--- a/cayenne-server/src/test/java/org/apache/cayenne/testdo/inheritance_vertical/IvSub3.java
+++ b/cayenne-server/src/test/java/org/apache/cayenne/testdo/inheritance_vertical/IvSub3.java
@@ -20,6 +20,7 @@
 package org.apache.cayenne.testdo.inheritance_vertical;
 
 import org.apache.cayenne.testdo.inheritance_vertical.auto._IvSub3;
+import org.apache.cayenne.validation.ValidationException;
 
 public class IvSub3 extends _IvSub3 {
 
@@ -28,4 +29,11 @@ public class IvSub3 extends _IvSub3 {
     public void setIvRoot(IvRoot ivRoot) {
         setToOneTarget("ivRoot", ivRoot, true);
     }
+
+    @Override
+    protected void onPrePersist() {
+        if(getIvRoot() == null) {
+            throw new ValidationException("ivRoot is null");
+        }
+    }
 }

http://git-wip-us.apache.org/repos/asf/cayenne/blob/cf9d83b4/cayenne-server/src/test/java/org/apache/cayenne/testdo/inheritance_vertical/auto/_IvSub3.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/test/java/org/apache/cayenne/testdo/inheritance_vertical/auto/_IvSub3.java b/cayenne-server/src/test/java/org/apache/cayenne/testdo/inheritance_vertical/auto/_IvSub3.java
index 0bab942..9c90d5e 100644
--- a/cayenne-server/src/test/java/org/apache/cayenne/testdo/inheritance_vertical/auto/_IvSub3.java
+++ b/cayenne-server/src/test/java/org/apache/cayenne/testdo/inheritance_vertical/auto/_IvSub3.java
@@ -23,4 +23,6 @@ public abstract class _IvSub3 extends IvRoot {
     }
 
 
+    protected abstract void onPrePersist();
+
 }

http://git-wip-us.apache.org/repos/asf/cayenne/blob/cf9d83b4/cayenne-server/src/test/resources/inheritance-vertical.map.xml
----------------------------------------------------------------------
diff --git a/cayenne-server/src/test/resources/inheritance-vertical.map.xml b/cayenne-server/src/test/resources/inheritance-vertical.map.xml
index 694dc11..89e41ac 100644
--- a/cayenne-server/src/test/resources/inheritance-vertical.map.xml
+++ b/cayenne-server/src/test/resources/inheritance-vertical.map.xml
@@ -43,7 +43,7 @@
 		<db-attribute name="ATTR2" type="VARCHAR" isMandatory="true" length="100"/>
 		<db-attribute name="ID" type="INTEGER" isPrimaryKey="true" isMandatory="true"/>
 		<db-attribute name="OTHER1_ID" type="INTEGER" isMandatory="true"/>
-        <db-attribute name="OTHER2_ID" type="INTEGER" isMandatory="true"/>
+		<db-attribute name="OTHER2_ID" type="INTEGER" isMandatory="true"/>
 	</db-entity>
 	<db-entity name="IV_OTHER">
 		<db-attribute name="ID" type="INTEGER" isPrimaryKey="true" isMandatory="true"/>
@@ -69,7 +69,6 @@
 	</db-entity>
 	<db-entity name="IV_SUB3">
 		<db-attribute name="ID" type="BIGINT" isPrimaryKey="true" isMandatory="true"/>
-		<!--db-attribute name="SUB3_ATTR" type="INTEGER"/-->
 		<db-attribute name="IV_ROOT_ID" type="INTEGER" isMandatory="true"/>
 	</db-entity>
 	<obj-entity name="Iv1Root" className="org.apache.cayenne.testdo.inheritance_vertical.Iv1Root" dbEntityName="IV1_ROOT">
@@ -131,8 +130,7 @@
 	</obj-entity>
 	<obj-entity name="IvSub3" superEntityName="IvRoot" className="org.apache.cayenne.testdo.inheritance_vertical.IvSub3">
 		<qualifier><![CDATA[discriminator = "IvSub3"]]></qualifier>
-		<!--obj-attribute name="sub3Attr" type="int" db-attribute-path="sub3.SUB3_ATTR"/-->
-		<!--pre-persist method-name="onPrePersist"/-->
+		<pre-persist method-name="onPrePersist"/>
 	</obj-entity>
 	<db-relationship name="sub1" source="IV1_ROOT" target="IV1_SUB1" toDependentPK="true" toMany="false">
 		<db-attribute-pair source="ID" target="ID"/>
@@ -173,8 +171,8 @@
 	<db-relationship name="other1" source="IV_IMPL" target="IV_OTHER" toMany="false">
 		<db-attribute-pair source="OTHER1_ID" target="ID"/>
 	</db-relationship>
-    <db-relationship name="other2" source="IV_IMPL" target="IV_OTHER" toMany="false">
-        <db-attribute-pair source="OTHER2_ID" target="ID"/>
+	<db-relationship name="other2" source="IV_IMPL" target="IV_OTHER" toMany="false">
+		<db-attribute-pair source="OTHER2_ID" target="ID"/>
 	</db-relationship>
 	<db-relationship name="impls" source="IV_OTHER" target="IV_IMPL" toMany="true">
 		<db-attribute-pair source="ID" target="OTHER_ID"/>
@@ -200,9 +198,6 @@
 	<db-relationship name="master" source="IV_SUB1_SUB1" target="IV_SUB1" toMany="false">
 		<db-attribute-pair source="ID" target="ID"/>
 	</db-relationship>
-	<!--db-relationship name="ivSub3s1" source="IV_SUB2" target="IV_SUB3" toMany="true">
-		<db-attribute-pair source="ID" target="IV_ROOT_ID"/>
-	</db-relationship-->
 	<db-relationship name="master" source="IV_SUB2" target="IV_ROOT" toMany="false">
 		<db-attribute-pair source="ID" target="ID"/>
 	</db-relationship>
@@ -216,5 +211,4 @@
 	<obj-relationship name="other2" source="IvImpl" target="IvOther" deleteRule="Nullify" db-relationship-path="impl.other2"/>
 	<obj-relationship name="impls" source="IvOther" target="IvImpl" deleteRule="Deny" db-relationship-path="impls.base"/>
 	<obj-relationship name="ivRoot" source="IvSub3" target="IvRoot" deleteRule="Nullify" db-relationship-path="sub3.ivRoot1"/>
-	<!--obj-relationship name="ivSub3ToRoot" source="IvSub3" target="IvRoot" deleteRule="Nullify" db-relationship-path="sub3"/-->
 </data-map>