CAY-2682 Vertical Inheritance: DB-generated PK doesn't propagate from the root to children
* porting tests from 4.1.. 4.2 doesn't have this issue, but we need to confirm it
* (regenerating classes from "inheritance-vertical.map.xml", so there are some unrelated changes too)
diff --git a/RELEASE-NOTES.txt b/RELEASE-NOTES.txt
index c9ad278..84d4952 100644
--- a/RELEASE-NOTES.txt
+++ b/RELEASE-NOTES.txt
@@ -25,6 +25,7 @@
CAY-2670 CommitLog does not include FKs for deleted objects with one-way relationships
CAY-2673 Support ordering by aggregate functions
CAY-2674 Support in-memory evaluation of aggregate functions
+CAY-2682 Vertical Inheritance: DB-generated PK doesn't propagate from the root to children
Bug Fixes:
diff --git a/cayenne-crypto/src/test/java/org/apache/cayenne/crypto/db/auto/_Table1.java b/cayenne-crypto/src/test/java/org/apache/cayenne/crypto/db/auto/_Table1.java
index 71855de..d96d3df 100644
--- a/cayenne-crypto/src/test/java/org/apache/cayenne/crypto/db/auto/_Table1.java
+++ b/cayenne-crypto/src/test/java/org/apache/cayenne/crypto/db/auto/_Table1.java
@@ -20,7 +20,7 @@
*/
public abstract class _Table1 extends BaseDataObject {
- private static final long serialVersionUID = 1L;
+ private static final long serialVersionUID = 1L;
public static final String ID_PK_COLUMN = "ID";
diff --git a/cayenne-crypto/src/test/java/org/apache/cayenne/crypto/db/auto/_Table2.java b/cayenne-crypto/src/test/java/org/apache/cayenne/crypto/db/auto/_Table2.java
index ebb619c..c080161 100644
--- a/cayenne-crypto/src/test/java/org/apache/cayenne/crypto/db/auto/_Table2.java
+++ b/cayenne-crypto/src/test/java/org/apache/cayenne/crypto/db/auto/_Table2.java
@@ -16,7 +16,7 @@
*/
public abstract class _Table2 extends BaseDataObject {
- private static final long serialVersionUID = 1L;
+ private static final long serialVersionUID = 1L;
public static final String ID_PK_COLUMN = "ID";
diff --git a/cayenne-crypto/src/test/java/org/apache/cayenne/crypto/db/auto/_Table3.java b/cayenne-crypto/src/test/java/org/apache/cayenne/crypto/db/auto/_Table3.java
index a25a778..7b00bf4 100644
--- a/cayenne-crypto/src/test/java/org/apache/cayenne/crypto/db/auto/_Table3.java
+++ b/cayenne-crypto/src/test/java/org/apache/cayenne/crypto/db/auto/_Table3.java
@@ -16,7 +16,7 @@
*/
public abstract class _Table3 extends BaseDataObject {
- private static final long serialVersionUID = 1L;
+ private static final long serialVersionUID = 1L;
public static final String ID_PK_COLUMN = "ID";
diff --git a/cayenne-crypto/src/test/java/org/apache/cayenne/crypto/db/auto/_Table4.java b/cayenne-crypto/src/test/java/org/apache/cayenne/crypto/db/auto/_Table4.java
index b2dd4ff..00b826a 100644
--- a/cayenne-crypto/src/test/java/org/apache/cayenne/crypto/db/auto/_Table4.java
+++ b/cayenne-crypto/src/test/java/org/apache/cayenne/crypto/db/auto/_Table4.java
@@ -17,7 +17,7 @@
*/
public abstract class _Table4 extends BaseDataObject {
- private static final long serialVersionUID = 1L;
+ private static final long serialVersionUID = 1L;
public static final String ID_PK_COLUMN = "ID";
diff --git a/cayenne-crypto/src/test/java/org/apache/cayenne/crypto/db/auto/_Table5.java b/cayenne-crypto/src/test/java/org/apache/cayenne/crypto/db/auto/_Table5.java
index e4523e6..454fa7a 100644
--- a/cayenne-crypto/src/test/java/org/apache/cayenne/crypto/db/auto/_Table5.java
+++ b/cayenne-crypto/src/test/java/org/apache/cayenne/crypto/db/auto/_Table5.java
@@ -16,7 +16,7 @@
*/
public abstract class _Table5 extends BaseDataObject {
- private static final long serialVersionUID = 1L;
+ private static final long serialVersionUID = 1L;
public static final String ID_PK_COLUMN = "ID";
diff --git a/cayenne-crypto/src/test/java/org/apache/cayenne/crypto/db/auto/_Table6.java b/cayenne-crypto/src/test/java/org/apache/cayenne/crypto/db/auto/_Table6.java
index 5255744..04966ca 100644
--- a/cayenne-crypto/src/test/java/org/apache/cayenne/crypto/db/auto/_Table6.java
+++ b/cayenne-crypto/src/test/java/org/apache/cayenne/crypto/db/auto/_Table6.java
@@ -16,7 +16,7 @@
*/
public abstract class _Table6 extends BaseDataObject {
- private static final long serialVersionUID = 1L;
+ private static final long serialVersionUID = 1L;
public static final String ID_PK_COLUMN = "ID";
diff --git a/cayenne-crypto/src/test/java/org/apache/cayenne/crypto/db/auto/_Table7.java b/cayenne-crypto/src/test/java/org/apache/cayenne/crypto/db/auto/_Table7.java
index 3964c74..586a199 100644
--- a/cayenne-crypto/src/test/java/org/apache/cayenne/crypto/db/auto/_Table7.java
+++ b/cayenne-crypto/src/test/java/org/apache/cayenne/crypto/db/auto/_Table7.java
@@ -19,7 +19,7 @@
*/
public abstract class _Table7 extends BaseDataObject {
- private static final long serialVersionUID = 1L;
+ private static final long serialVersionUID = 1L;
public static final String ID_PK_COLUMN = "ID";
diff --git a/cayenne-crypto/src/test/java/org/apache/cayenne/crypto/db/auto/_Table8.java b/cayenne-crypto/src/test/java/org/apache/cayenne/crypto/db/auto/_Table8.java
index d8f6527..7dc86f2 100644
--- a/cayenne-crypto/src/test/java/org/apache/cayenne/crypto/db/auto/_Table8.java
+++ b/cayenne-crypto/src/test/java/org/apache/cayenne/crypto/db/auto/_Table8.java
@@ -16,7 +16,7 @@
*/
public abstract class _Table8 extends BaseDataObject {
- private static final long serialVersionUID = 1L;
+ private static final long serialVersionUID = 1L;
public static final String ID_PK_COLUMN = "ID";
diff --git a/cayenne-protostuff/src/test/java/org/apache/cayenne/rop/protostuff/persistent/auto/_ClientMtTable1.java b/cayenne-protostuff/src/test/java/org/apache/cayenne/rop/protostuff/persistent/auto/_ClientMtTable1.java
index 9e36772..3b0ed49 100644
--- a/cayenne-protostuff/src/test/java/org/apache/cayenne/rop/protostuff/persistent/auto/_ClientMtTable1.java
+++ b/cayenne-protostuff/src/test/java/org/apache/cayenne/rop/protostuff/persistent/auto/_ClientMtTable1.java
@@ -42,6 +42,7 @@
objectContext.prepareForAccess(this, "dateAttribute", false);
}
+
return dateAttribute;
}
@@ -59,6 +60,7 @@
objectContext.prepareForAccess(this, "globalAttribute", false);
}
+
return globalAttribute;
}
@@ -76,6 +78,7 @@
objectContext.prepareForAccess(this, "oldDateAttribute", false);
}
+
return oldDateAttribute;
}
@@ -93,6 +96,7 @@
objectContext.prepareForAccess(this, "serverAttribute", false);
}
+
return serverAttribute;
}
@@ -110,6 +114,7 @@
objectContext.prepareForAccess(this, "timeAttribute", false);
}
+
return timeAttribute;
}
@@ -127,6 +132,7 @@
objectContext.prepareForAccess(this, "timestampAttribute", false);
}
+
return timestampAttribute;
}
diff --git a/cayenne-protostuff/src/test/java/org/apache/cayenne/rop/protostuff/persistent/auto/_ClientMtTable2.java b/cayenne-protostuff/src/test/java/org/apache/cayenne/rop/protostuff/persistent/auto/_ClientMtTable2.java
index 6020a3e..2f0b152 100644
--- a/cayenne-protostuff/src/test/java/org/apache/cayenne/rop/protostuff/persistent/auto/_ClientMtTable2.java
+++ b/cayenne-protostuff/src/test/java/org/apache/cayenne/rop/protostuff/persistent/auto/_ClientMtTable2.java
@@ -26,6 +26,7 @@
objectContext.prepareForAccess(this, "globalAttribute", false);
}
+
return globalAttribute;
}
diff --git a/cayenne-server/src/test/java/org/apache/cayenne/access/VerticalInheritanceIT.java b/cayenne-server/src/test/java/org/apache/cayenne/access/VerticalInheritanceIT.java
index 4e7645e..4a83c83 100644
--- a/cayenne-server/src/test/java/org/apache/cayenne/access/VerticalInheritanceIT.java
+++ b/cayenne-server/src/test/java/org/apache/cayenne/access/VerticalInheritanceIT.java
@@ -18,13 +18,7 @@
****************************************************************/
package org.apache.cayenne.access;
-import java.sql.SQLException;
-import java.sql.Types;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
+import org.apache.cayenne.Cayenne;
import org.apache.cayenne.ObjectContext;
import org.apache.cayenne.configuration.server.ServerRuntime;
import org.apache.cayenne.di.Inject;
@@ -33,24 +27,19 @@
import org.apache.cayenne.query.SelectById;
import org.apache.cayenne.test.jdbc.DBHelper;
import org.apache.cayenne.test.jdbc.TableHelper;
-import org.apache.cayenne.testdo.inheritance_vertical.Iv1Root;
-import org.apache.cayenne.testdo.inheritance_vertical.Iv1Sub1;
-import org.apache.cayenne.testdo.inheritance_vertical.Iv2Sub1;
-import org.apache.cayenne.testdo.inheritance_vertical.Iv2X;
-import org.apache.cayenne.testdo.inheritance_vertical.IvConcrete;
-import org.apache.cayenne.testdo.inheritance_vertical.IvImpl;
-import org.apache.cayenne.testdo.inheritance_vertical.IvImplWithLock;
-import org.apache.cayenne.testdo.inheritance_vertical.IvOther;
-import org.apache.cayenne.testdo.inheritance_vertical.IvRoot;
-import org.apache.cayenne.testdo.inheritance_vertical.IvSub1;
-import org.apache.cayenne.testdo.inheritance_vertical.IvSub1Sub1;
-import org.apache.cayenne.testdo.inheritance_vertical.IvSub2;
-import org.apache.cayenne.testdo.inheritance_vertical.IvSub3;
+import org.apache.cayenne.testdo.inheritance_vertical.*;
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.junit.Test;
+import java.sql.SQLException;
+import java.sql.Types;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
import static org.junit.Assert.*;
@UseServerRuntime(CayenneProjects.INHERITANCE_VERTICAL_PROJECT)
@@ -751,4 +740,13 @@
EJBQLQuery query3 = new EJBQLQuery("SELECT COUNT(a) FROM IvSub2 a");
assertEquals(Collections.singletonList(2L), context.performQuery(query3));
}
+
+ @Test
+ public void testPropagatedGeneratedPK() {
+ IvGenKeySub sub = context.newObject(IvGenKeySub.class);
+ sub.setName("test");
+ context.commitChanges();
+
+ assertTrue(Cayenne.intPKForObject(sub) > 0);
+ }
}
diff --git a/cayenne-server/src/test/java/org/apache/cayenne/testdo/inheritance_vertical/IvGenKeyRoot.java b/cayenne-server/src/test/java/org/apache/cayenne/testdo/inheritance_vertical/IvGenKeyRoot.java
new file mode 100644
index 0000000..c407be3
--- /dev/null
+++ b/cayenne-server/src/test/java/org/apache/cayenne/testdo/inheritance_vertical/IvGenKeyRoot.java
@@ -0,0 +1,9 @@
+package org.apache.cayenne.testdo.inheritance_vertical;
+
+import org.apache.cayenne.testdo.inheritance_vertical.auto._IvGenKeyRoot;
+
+public class IvGenKeyRoot extends _IvGenKeyRoot {
+
+ private static final long serialVersionUID = 1L;
+
+}
diff --git a/cayenne-server/src/test/java/org/apache/cayenne/testdo/inheritance_vertical/IvGenKeySub.java b/cayenne-server/src/test/java/org/apache/cayenne/testdo/inheritance_vertical/IvGenKeySub.java
new file mode 100644
index 0000000..c58b953
--- /dev/null
+++ b/cayenne-server/src/test/java/org/apache/cayenne/testdo/inheritance_vertical/IvGenKeySub.java
@@ -0,0 +1,9 @@
+package org.apache.cayenne.testdo.inheritance_vertical;
+
+import org.apache.cayenne.testdo.inheritance_vertical.auto._IvGenKeySub;
+
+public class IvGenKeySub extends _IvGenKeySub {
+
+ private static final long serialVersionUID = 1L;
+
+}
diff --git a/cayenne-server/src/test/java/org/apache/cayenne/testdo/inheritance_vertical/auto/_Iv1Root.java b/cayenne-server/src/test/java/org/apache/cayenne/testdo/inheritance_vertical/auto/_Iv1Root.java
index 7bde95a..ca06353 100644
--- a/cayenne-server/src/test/java/org/apache/cayenne/testdo/inheritance_vertical/auto/_Iv1Root.java
+++ b/cayenne-server/src/test/java/org/apache/cayenne/testdo/inheritance_vertical/auto/_Iv1Root.java
@@ -5,8 +5,6 @@
import java.io.ObjectOutputStream;
import org.apache.cayenne.BaseDataObject;
-import org.apache.cayenne.exp.ExpressionFactory;
-import org.apache.cayenne.exp.property.NumericProperty;
import org.apache.cayenne.exp.property.PropertyFactory;
import org.apache.cayenne.exp.property.StringProperty;
@@ -20,7 +18,6 @@
private static final long serialVersionUID = 1L;
- public static final NumericProperty<Integer> ID_PK_PROPERTY = PropertyFactory.createNumeric(ExpressionFactory.dbPathExp("ID"), Integer.class);
public static final String ID_PK_COLUMN = "ID";
public static final StringProperty<String> DISCRIMINATOR = PropertyFactory.createString("discriminator", String.class);
diff --git a/cayenne-server/src/test/java/org/apache/cayenne/testdo/inheritance_vertical/auto/_Iv1Sub1.java b/cayenne-server/src/test/java/org/apache/cayenne/testdo/inheritance_vertical/auto/_Iv1Sub1.java
index d51fc7b..18f5381 100644
--- a/cayenne-server/src/test/java/org/apache/cayenne/testdo/inheritance_vertical/auto/_Iv1Sub1.java
+++ b/cayenne-server/src/test/java/org/apache/cayenne/testdo/inheritance_vertical/auto/_Iv1Sub1.java
@@ -4,8 +4,6 @@
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
-import org.apache.cayenne.exp.ExpressionFactory;
-import org.apache.cayenne.exp.property.NumericProperty;
import org.apache.cayenne.exp.property.PropertyFactory;
import org.apache.cayenne.exp.property.StringProperty;
import org.apache.cayenne.testdo.inheritance_vertical.Iv1Root;
@@ -20,7 +18,6 @@
private static final long serialVersionUID = 1L;
- public static final NumericProperty<Integer> ID_PK_PROPERTY = PropertyFactory.createNumeric(ExpressionFactory.dbPathExp("ID"), Integer.class);
public static final String ID_PK_COLUMN = "ID";
public static final StringProperty<String> NAME = PropertyFactory.createString("name", String.class);
diff --git a/cayenne-server/src/test/java/org/apache/cayenne/testdo/inheritance_vertical/auto/_Iv2Root.java b/cayenne-server/src/test/java/org/apache/cayenne/testdo/inheritance_vertical/auto/_Iv2Root.java
index 56e8083..97d5e0c 100644
--- a/cayenne-server/src/test/java/org/apache/cayenne/testdo/inheritance_vertical/auto/_Iv2Root.java
+++ b/cayenne-server/src/test/java/org/apache/cayenne/testdo/inheritance_vertical/auto/_Iv2Root.java
@@ -5,8 +5,6 @@
import java.io.ObjectOutputStream;
import org.apache.cayenne.BaseDataObject;
-import org.apache.cayenne.exp.ExpressionFactory;
-import org.apache.cayenne.exp.property.NumericProperty;
import org.apache.cayenne.exp.property.PropertyFactory;
import org.apache.cayenne.exp.property.StringProperty;
@@ -20,7 +18,6 @@
private static final long serialVersionUID = 1L;
- public static final NumericProperty<Integer> ID_PK_PROPERTY = PropertyFactory.createNumeric(ExpressionFactory.dbPathExp("ID"), Integer.class);
public static final String ID_PK_COLUMN = "ID";
public static final StringProperty<String> DISCRIMINATOR = PropertyFactory.createString("discriminator", String.class);
diff --git a/cayenne-server/src/test/java/org/apache/cayenne/testdo/inheritance_vertical/auto/_Iv2Sub1.java b/cayenne-server/src/test/java/org/apache/cayenne/testdo/inheritance_vertical/auto/_Iv2Sub1.java
index c4dab06..7ad3f83 100644
--- a/cayenne-server/src/test/java/org/apache/cayenne/testdo/inheritance_vertical/auto/_Iv2Sub1.java
+++ b/cayenne-server/src/test/java/org/apache/cayenne/testdo/inheritance_vertical/auto/_Iv2Sub1.java
@@ -4,9 +4,7 @@
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
-import org.apache.cayenne.exp.ExpressionFactory;
import org.apache.cayenne.exp.property.EntityProperty;
-import org.apache.cayenne.exp.property.NumericProperty;
import org.apache.cayenne.exp.property.PropertyFactory;
import org.apache.cayenne.testdo.inheritance_vertical.Iv2Root;
import org.apache.cayenne.testdo.inheritance_vertical.Iv2X;
@@ -21,7 +19,6 @@
private static final long serialVersionUID = 1L;
- public static final NumericProperty<Integer> ID_PK_PROPERTY = PropertyFactory.createNumeric(ExpressionFactory.dbPathExp("ID"), Integer.class);
public static final String ID_PK_COLUMN = "ID";
public static final EntityProperty<Iv2X> X = PropertyFactory.createEntity("x", Iv2X.class);
diff --git a/cayenne-server/src/test/java/org/apache/cayenne/testdo/inheritance_vertical/auto/_Iv2X.java b/cayenne-server/src/test/java/org/apache/cayenne/testdo/inheritance_vertical/auto/_Iv2X.java
index af083d2..c43ad20 100644
--- a/cayenne-server/src/test/java/org/apache/cayenne/testdo/inheritance_vertical/auto/_Iv2X.java
+++ b/cayenne-server/src/test/java/org/apache/cayenne/testdo/inheritance_vertical/auto/_Iv2X.java
@@ -5,9 +5,6 @@
import java.io.ObjectOutputStream;
import org.apache.cayenne.BaseDataObject;
-import org.apache.cayenne.exp.ExpressionFactory;
-import org.apache.cayenne.exp.property.NumericProperty;
-import org.apache.cayenne.exp.property.PropertyFactory;
/**
* Class _Iv2X was generated by Cayenne.
@@ -19,7 +16,6 @@
private static final long serialVersionUID = 1L;
- public static final NumericProperty<Integer> ID_PK_PROPERTY = PropertyFactory.createNumeric(ExpressionFactory.dbPathExp("ID"), Integer.class);
public static final String ID_PK_COLUMN = "ID";
diff --git a/cayenne-server/src/test/java/org/apache/cayenne/testdo/inheritance_vertical/auto/_IvAbstract.java b/cayenne-server/src/test/java/org/apache/cayenne/testdo/inheritance_vertical/auto/_IvAbstract.java
index 8587af9..b77509e 100644
--- a/cayenne-server/src/test/java/org/apache/cayenne/testdo/inheritance_vertical/auto/_IvAbstract.java
+++ b/cayenne-server/src/test/java/org/apache/cayenne/testdo/inheritance_vertical/auto/_IvAbstract.java
@@ -5,8 +5,6 @@
import java.io.ObjectOutputStream;
import org.apache.cayenne.BaseDataObject;
-import org.apache.cayenne.exp.ExpressionFactory;
-import org.apache.cayenne.exp.property.NumericProperty;
import org.apache.cayenne.exp.property.PropertyFactory;
import org.apache.cayenne.exp.property.StringProperty;
@@ -20,7 +18,6 @@
private static final long serialVersionUID = 1L;
- public static final NumericProperty<Integer> ID_PK_PROPERTY = PropertyFactory.createNumeric(ExpressionFactory.dbPathExp("ID"), Integer.class);
public static final String ID_PK_COLUMN = "ID";
public static final StringProperty<String> TYPE = PropertyFactory.createString("type", String.class);
diff --git a/cayenne-server/src/test/java/org/apache/cayenne/testdo/inheritance_vertical/auto/_IvBase.java b/cayenne-server/src/test/java/org/apache/cayenne/testdo/inheritance_vertical/auto/_IvBase.java
index 8d0bd22..cd554f2 100644
--- a/cayenne-server/src/test/java/org/apache/cayenne/testdo/inheritance_vertical/auto/_IvBase.java
+++ b/cayenne-server/src/test/java/org/apache/cayenne/testdo/inheritance_vertical/auto/_IvBase.java
@@ -5,8 +5,6 @@
import java.io.ObjectOutputStream;
import org.apache.cayenne.BaseDataObject;
-import org.apache.cayenne.exp.ExpressionFactory;
-import org.apache.cayenne.exp.property.NumericProperty;
import org.apache.cayenne.exp.property.PropertyFactory;
import org.apache.cayenne.exp.property.StringProperty;
@@ -20,7 +18,6 @@
private static final long serialVersionUID = 1L;
- public static final NumericProperty<Integer> ID_PK_PROPERTY = PropertyFactory.createNumeric(ExpressionFactory.dbPathExp("ID"), Integer.class);
public static final String ID_PK_COLUMN = "ID";
public static final StringProperty<String> NAME = PropertyFactory.createString("name", String.class);
diff --git a/cayenne-server/src/test/java/org/apache/cayenne/testdo/inheritance_vertical/auto/_IvBaseWithLock.java b/cayenne-server/src/test/java/org/apache/cayenne/testdo/inheritance_vertical/auto/_IvBaseWithLock.java
index e7c644e..601ccde 100644
--- a/cayenne-server/src/test/java/org/apache/cayenne/testdo/inheritance_vertical/auto/_IvBaseWithLock.java
+++ b/cayenne-server/src/test/java/org/apache/cayenne/testdo/inheritance_vertical/auto/_IvBaseWithLock.java
@@ -5,8 +5,6 @@
import java.io.ObjectOutputStream;
import org.apache.cayenne.BaseDataObject;
-import org.apache.cayenne.exp.ExpressionFactory;
-import org.apache.cayenne.exp.property.NumericProperty;
import org.apache.cayenne.exp.property.PropertyFactory;
import org.apache.cayenne.exp.property.StringProperty;
@@ -20,7 +18,6 @@
private static final long serialVersionUID = 1L;
- public static final NumericProperty<Integer> ID_PK_PROPERTY = PropertyFactory.createNumeric(ExpressionFactory.dbPathExp("ID"), Integer.class);
public static final String ID_PK_COLUMN = "ID";
public static final StringProperty<String> NAME = PropertyFactory.createString("name", String.class);
diff --git a/cayenne-server/src/test/java/org/apache/cayenne/testdo/inheritance_vertical/auto/_IvConcrete.java b/cayenne-server/src/test/java/org/apache/cayenne/testdo/inheritance_vertical/auto/_IvConcrete.java
index 9f6f4f5..6c479ed 100644
--- a/cayenne-server/src/test/java/org/apache/cayenne/testdo/inheritance_vertical/auto/_IvConcrete.java
+++ b/cayenne-server/src/test/java/org/apache/cayenne/testdo/inheritance_vertical/auto/_IvConcrete.java
@@ -5,10 +5,8 @@
import java.io.ObjectOutputStream;
import java.util.List;
-import org.apache.cayenne.exp.ExpressionFactory;
import org.apache.cayenne.exp.property.EntityProperty;
import org.apache.cayenne.exp.property.ListProperty;
-import org.apache.cayenne.exp.property.NumericProperty;
import org.apache.cayenne.exp.property.PropertyFactory;
import org.apache.cayenne.exp.property.StringProperty;
import org.apache.cayenne.testdo.inheritance_vertical.IvAbstract;
@@ -24,7 +22,6 @@
private static final long serialVersionUID = 1L;
- public static final NumericProperty<Integer> ID_PK_PROPERTY = PropertyFactory.createNumeric(ExpressionFactory.dbPathExp("ID"), Integer.class);
public static final String ID_PK_COLUMN = "ID";
public static final StringProperty<String> NAME = PropertyFactory.createString("name", String.class);
diff --git a/cayenne-server/src/test/java/org/apache/cayenne/testdo/inheritance_vertical/auto/_IvGenKeyRoot.java b/cayenne-server/src/test/java/org/apache/cayenne/testdo/inheritance_vertical/auto/_IvGenKeyRoot.java
new file mode 100644
index 0000000..c0c9a0d
--- /dev/null
+++ b/cayenne-server/src/test/java/org/apache/cayenne/testdo/inheritance_vertical/auto/_IvGenKeyRoot.java
@@ -0,0 +1,106 @@
+package org.apache.cayenne.testdo.inheritance_vertical.auto;
+
+import java.io.IOException;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+
+import org.apache.cayenne.BaseDataObject;
+import org.apache.cayenne.exp.property.PropertyFactory;
+import org.apache.cayenne.exp.property.StringProperty;
+
+/**
+ * Class _IvGenKeyRoot 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 _IvGenKeyRoot extends BaseDataObject {
+
+ private static final long serialVersionUID = 1L;
+
+ public static final String ID_PK_COLUMN = "ID";
+
+ public static final StringProperty<String> DISCRIMINATOR = PropertyFactory.createString("discriminator", String.class);
+ public static final StringProperty<String> NAME = PropertyFactory.createString("name", String.class);
+
+ protected String discriminator;
+ protected String name;
+
+
+ public void setDiscriminator(String discriminator) {
+ beforePropertyWrite("discriminator", this.discriminator, discriminator);
+ this.discriminator = discriminator;
+ }
+
+ public String getDiscriminator() {
+ beforePropertyRead("discriminator");
+ return this.discriminator;
+ }
+
+ public void setName(String name) {
+ beforePropertyWrite("name", this.name, name);
+ this.name = name;
+ }
+
+ public String getName() {
+ beforePropertyRead("name");
+ return this.name;
+ }
+
+ @Override
+ public Object readPropertyDirectly(String propName) {
+ if(propName == null) {
+ throw new IllegalArgumentException();
+ }
+
+ switch(propName) {
+ case "discriminator":
+ return this.discriminator;
+ case "name":
+ return this.name;
+ default:
+ return super.readPropertyDirectly(propName);
+ }
+ }
+
+ @Override
+ public void writePropertyDirectly(String propName, Object val) {
+ if(propName == null) {
+ throw new IllegalArgumentException();
+ }
+
+ switch (propName) {
+ case "discriminator":
+ this.discriminator = (String)val;
+ break;
+ case "name":
+ this.name = (String)val;
+ break;
+ default:
+ super.writePropertyDirectly(propName, val);
+ }
+ }
+
+ private void writeObject(ObjectOutputStream out) throws IOException {
+ writeSerialized(out);
+ }
+
+ private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException {
+ readSerialized(in);
+ }
+
+ @Override
+ protected void writeState(ObjectOutputStream out) throws IOException {
+ super.writeState(out);
+ out.writeObject(this.discriminator);
+ out.writeObject(this.name);
+ }
+
+ @Override
+ protected void readState(ObjectInputStream in) throws IOException, ClassNotFoundException {
+ super.readState(in);
+ this.discriminator = (String)in.readObject();
+ this.name = (String)in.readObject();
+ }
+
+}
diff --git a/cayenne-server/src/test/java/org/apache/cayenne/testdo/inheritance_vertical/auto/_IvGenKeySub.java b/cayenne-server/src/test/java/org/apache/cayenne/testdo/inheritance_vertical/auto/_IvGenKeySub.java
new file mode 100644
index 0000000..62d5345
--- /dev/null
+++ b/cayenne-server/src/test/java/org/apache/cayenne/testdo/inheritance_vertical/auto/_IvGenKeySub.java
@@ -0,0 +1,66 @@
+package org.apache.cayenne.testdo.inheritance_vertical.auto;
+
+import java.io.IOException;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+
+import org.apache.cayenne.testdo.inheritance_vertical.IvGenKeyRoot;
+
+/**
+ * Class _IvGenKeySub 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 _IvGenKeySub extends IvGenKeyRoot {
+
+ private static final long serialVersionUID = 1L;
+
+ public static final String ID_PK_COLUMN = "ID";
+
+
+
+
+ @Override
+ public Object readPropertyDirectly(String propName) {
+ if(propName == null) {
+ throw new IllegalArgumentException();
+ }
+
+ switch(propName) {
+ default:
+ return super.readPropertyDirectly(propName);
+ }
+ }
+
+ @Override
+ public void writePropertyDirectly(String propName, Object val) {
+ if(propName == null) {
+ throw new IllegalArgumentException();
+ }
+
+ switch (propName) {
+ default:
+ super.writePropertyDirectly(propName, val);
+ }
+ }
+
+ private void writeObject(ObjectOutputStream out) throws IOException {
+ writeSerialized(out);
+ }
+
+ private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException {
+ readSerialized(in);
+ }
+
+ @Override
+ protected void writeState(ObjectOutputStream out) throws IOException {
+ super.writeState(out);
+ }
+
+ @Override
+ protected void readState(ObjectInputStream in) throws IOException, ClassNotFoundException {
+ super.readState(in);
+ }
+
+}
diff --git a/cayenne-server/src/test/java/org/apache/cayenne/testdo/inheritance_vertical/auto/_IvImpl.java b/cayenne-server/src/test/java/org/apache/cayenne/testdo/inheritance_vertical/auto/_IvImpl.java
index b264f19..86ab1ab 100644
--- a/cayenne-server/src/test/java/org/apache/cayenne/testdo/inheritance_vertical/auto/_IvImpl.java
+++ b/cayenne-server/src/test/java/org/apache/cayenne/testdo/inheritance_vertical/auto/_IvImpl.java
@@ -4,9 +4,7 @@
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
-import org.apache.cayenne.exp.ExpressionFactory;
import org.apache.cayenne.exp.property.EntityProperty;
-import org.apache.cayenne.exp.property.NumericProperty;
import org.apache.cayenne.exp.property.PropertyFactory;
import org.apache.cayenne.exp.property.StringProperty;
import org.apache.cayenne.testdo.inheritance_vertical.IvBase;
@@ -22,7 +20,6 @@
private static final long serialVersionUID = 1L;
- public static final NumericProperty<Integer> ID_PK_PROPERTY = PropertyFactory.createNumeric(ExpressionFactory.dbPathExp("ID"), Integer.class);
public static final String ID_PK_COLUMN = "ID";
public static final StringProperty<String> ATTR1 = PropertyFactory.createString("attr1", String.class);
diff --git a/cayenne-server/src/test/java/org/apache/cayenne/testdo/inheritance_vertical/auto/_IvImplWithLock.java b/cayenne-server/src/test/java/org/apache/cayenne/testdo/inheritance_vertical/auto/_IvImplWithLock.java
index 6a77d54..19e3e4e 100644
--- a/cayenne-server/src/test/java/org/apache/cayenne/testdo/inheritance_vertical/auto/_IvImplWithLock.java
+++ b/cayenne-server/src/test/java/org/apache/cayenne/testdo/inheritance_vertical/auto/_IvImplWithLock.java
@@ -4,9 +4,7 @@
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
-import org.apache.cayenne.exp.ExpressionFactory;
import org.apache.cayenne.exp.property.EntityProperty;
-import org.apache.cayenne.exp.property.NumericProperty;
import org.apache.cayenne.exp.property.PropertyFactory;
import org.apache.cayenne.exp.property.StringProperty;
import org.apache.cayenne.testdo.inheritance_vertical.IvBaseWithLock;
@@ -22,7 +20,6 @@
private static final long serialVersionUID = 1L;
- public static final NumericProperty<Integer> ID_PK_PROPERTY = PropertyFactory.createNumeric(ExpressionFactory.dbPathExp("ID"), Integer.class);
public static final String ID_PK_COLUMN = "ID";
public static final StringProperty<String> ATTR1 = PropertyFactory.createString("attr1", String.class);
diff --git a/cayenne-server/src/test/java/org/apache/cayenne/testdo/inheritance_vertical/auto/_IvOther.java b/cayenne-server/src/test/java/org/apache/cayenne/testdo/inheritance_vertical/auto/_IvOther.java
index 6ccc5d1..ae8c98b 100644
--- a/cayenne-server/src/test/java/org/apache/cayenne/testdo/inheritance_vertical/auto/_IvOther.java
+++ b/cayenne-server/src/test/java/org/apache/cayenne/testdo/inheritance_vertical/auto/_IvOther.java
@@ -6,9 +6,7 @@
import java.util.List;
import org.apache.cayenne.BaseDataObject;
-import org.apache.cayenne.exp.ExpressionFactory;
import org.apache.cayenne.exp.property.ListProperty;
-import org.apache.cayenne.exp.property.NumericProperty;
import org.apache.cayenne.exp.property.PropertyFactory;
import org.apache.cayenne.exp.property.StringProperty;
import org.apache.cayenne.testdo.inheritance_vertical.IvImpl;
@@ -24,7 +22,6 @@
private static final long serialVersionUID = 1L;
- public static final NumericProperty<Integer> ID_PK_PROPERTY = PropertyFactory.createNumeric(ExpressionFactory.dbPathExp("ID"), Integer.class);
public static final String ID_PK_COLUMN = "ID";
public static final StringProperty<String> NAME = PropertyFactory.createString("name", String.class);
@@ -46,11 +43,27 @@
return this.name;
}
+ public void addToImpls(IvImpl obj) {
+ addToManyTarget("impls", obj, true);
+ }
+
+ public void removeFromImpls(IvImpl obj) {
+ removeToManyTarget("impls", obj, true);
+ }
+
@SuppressWarnings("unchecked")
public List<IvImpl> getImpls() {
return (List<IvImpl>)readProperty("impls");
}
+ public void addToImplsWithLock(IvImplWithLock obj) {
+ addToManyTarget("implsWithLock", obj, true);
+ }
+
+ public void removeFromImplsWithLock(IvImplWithLock obj) {
+ removeToManyTarget("implsWithLock", obj, true);
+ }
+
@SuppressWarnings("unchecked")
public List<IvImplWithLock> getImplsWithLock() {
return (List<IvImplWithLock>)readProperty("implsWithLock");
diff --git a/cayenne-server/src/test/java/org/apache/cayenne/testdo/inheritance_vertical/auto/_IvRoot.java b/cayenne-server/src/test/java/org/apache/cayenne/testdo/inheritance_vertical/auto/_IvRoot.java
index 1f0e3d9..78277c6 100644
--- a/cayenne-server/src/test/java/org/apache/cayenne/testdo/inheritance_vertical/auto/_IvRoot.java
+++ b/cayenne-server/src/test/java/org/apache/cayenne/testdo/inheritance_vertical/auto/_IvRoot.java
@@ -5,8 +5,6 @@
import java.io.ObjectOutputStream;
import org.apache.cayenne.BaseDataObject;
-import org.apache.cayenne.exp.ExpressionFactory;
-import org.apache.cayenne.exp.property.NumericProperty;
import org.apache.cayenne.exp.property.PropertyFactory;
import org.apache.cayenne.exp.property.StringProperty;
@@ -20,7 +18,6 @@
private static final long serialVersionUID = 1L;
- public static final NumericProperty<Integer> ID_PK_PROPERTY = PropertyFactory.createNumeric(ExpressionFactory.dbPathExp("ID"), Integer.class);
public static final String ID_PK_COLUMN = "ID";
public static final StringProperty<String> DISCRIMINATOR = PropertyFactory.createString("discriminator", String.class);
diff --git a/cayenne-server/src/test/java/org/apache/cayenne/testdo/inheritance_vertical/auto/_IvSub1.java b/cayenne-server/src/test/java/org/apache/cayenne/testdo/inheritance_vertical/auto/_IvSub1.java
index 76115cb..8fef82e 100644
--- a/cayenne-server/src/test/java/org/apache/cayenne/testdo/inheritance_vertical/auto/_IvSub1.java
+++ b/cayenne-server/src/test/java/org/apache/cayenne/testdo/inheritance_vertical/auto/_IvSub1.java
@@ -4,8 +4,6 @@
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
-import org.apache.cayenne.exp.ExpressionFactory;
-import org.apache.cayenne.exp.property.NumericProperty;
import org.apache.cayenne.exp.property.PropertyFactory;
import org.apache.cayenne.exp.property.StringProperty;
import org.apache.cayenne.testdo.inheritance_vertical.IvRoot;
@@ -20,7 +18,6 @@
private static final long serialVersionUID = 1L;
- public static final NumericProperty<Integer> ID_PK_PROPERTY = PropertyFactory.createNumeric(ExpressionFactory.dbPathExp("ID"), Integer.class);
public static final String ID_PK_COLUMN = "ID";
public static final StringProperty<String> SUB1NAME = PropertyFactory.createString("sub1Name", String.class);
diff --git a/cayenne-server/src/test/java/org/apache/cayenne/testdo/inheritance_vertical/auto/_IvSub1Sub1.java b/cayenne-server/src/test/java/org/apache/cayenne/testdo/inheritance_vertical/auto/_IvSub1Sub1.java
index 4d31b89..bf6a8b6 100644
--- a/cayenne-server/src/test/java/org/apache/cayenne/testdo/inheritance_vertical/auto/_IvSub1Sub1.java
+++ b/cayenne-server/src/test/java/org/apache/cayenne/testdo/inheritance_vertical/auto/_IvSub1Sub1.java
@@ -4,8 +4,6 @@
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
-import org.apache.cayenne.exp.ExpressionFactory;
-import org.apache.cayenne.exp.property.NumericProperty;
import org.apache.cayenne.exp.property.PropertyFactory;
import org.apache.cayenne.exp.property.StringProperty;
import org.apache.cayenne.testdo.inheritance_vertical.IvSub1;
@@ -20,7 +18,6 @@
private static final long serialVersionUID = 1L;
- public static final NumericProperty<Integer> ID_PK_PROPERTY = PropertyFactory.createNumeric(ExpressionFactory.dbPathExp("ID"), Integer.class);
public static final String ID_PK_COLUMN = "ID";
public static final StringProperty<String> SUB1SUB1NAME = PropertyFactory.createString("sub1Sub1Name", String.class);
diff --git a/cayenne-server/src/test/java/org/apache/cayenne/testdo/inheritance_vertical/auto/_IvSub2.java b/cayenne-server/src/test/java/org/apache/cayenne/testdo/inheritance_vertical/auto/_IvSub2.java
index 584c0d7..6b133b9 100644
--- a/cayenne-server/src/test/java/org/apache/cayenne/testdo/inheritance_vertical/auto/_IvSub2.java
+++ b/cayenne-server/src/test/java/org/apache/cayenne/testdo/inheritance_vertical/auto/_IvSub2.java
@@ -4,8 +4,6 @@
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
-import org.apache.cayenne.exp.ExpressionFactory;
-import org.apache.cayenne.exp.property.NumericProperty;
import org.apache.cayenne.exp.property.PropertyFactory;
import org.apache.cayenne.exp.property.StringProperty;
import org.apache.cayenne.testdo.inheritance_vertical.IvRoot;
@@ -20,7 +18,6 @@
private static final long serialVersionUID = 1L;
- public static final NumericProperty<Integer> ID_PK_PROPERTY = PropertyFactory.createNumeric(ExpressionFactory.dbPathExp("ID"), Integer.class);
public static final String ID_PK_COLUMN = "ID";
public static final StringProperty<String> SUB2ATTR = PropertyFactory.createString("sub2Attr", String.class);
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 b6c1bba..50fdb30 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
@@ -4,9 +4,7 @@
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
-import org.apache.cayenne.exp.ExpressionFactory;
import org.apache.cayenne.exp.property.EntityProperty;
-import org.apache.cayenne.exp.property.NumericProperty;
import org.apache.cayenne.exp.property.PropertyFactory;
import org.apache.cayenne.testdo.inheritance_vertical.IvRoot;
@@ -20,7 +18,6 @@
private static final long serialVersionUID = 1L;
- public static final NumericProperty<Integer> ID_PK_PROPERTY = PropertyFactory.createNumeric(ExpressionFactory.dbPathExp("ID"), Integer.class);
public static final String ID_PK_COLUMN = "ID";
public static final EntityProperty<IvRoot> IV_ROOT = PropertyFactory.createEntity("ivRoot", IvRoot.class);
@@ -28,6 +25,10 @@
protected Object ivRoot;
+ public void setIvRoot(IvRoot ivRoot) {
+ setToOneTarget("ivRoot", ivRoot, true);
+ }
+
public IvRoot getIvRoot() {
return (IvRoot)readProperty("ivRoot");
}
diff --git a/cayenne-server/src/test/resources/cayenne-inheritance-vertical.xml b/cayenne-server/src/test/resources/cayenne-inheritance-vertical.xml
index 3118079..f5a5e18 100644
--- a/cayenne-server/src/test/resources/cayenne-inheritance-vertical.xml
+++ b/cayenne-server/src/test/resources/cayenne-inheritance-vertical.xml
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<domain xmlns="http://cayenne.apache.org/schema/10/domain"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://cayenne.apache.org/schema/10/domain http://cayenne.apache.org/schema/10/domain.xsd"
+ xsi:schemaLocation="http://cayenne.apache.org/schema/10/domain https://cayenne.apache.org/schema/10/domain.xsd"
project-version="10">
<map name="inheritance-vertical"/>
</domain>
diff --git a/cayenne-server/src/test/resources/inheritance-vertical.map.xml b/cayenne-server/src/test/resources/inheritance-vertical.map.xml
index 25b772a..1a108ae 100644
--- a/cayenne-server/src/test/resources/inheritance-vertical.map.xml
+++ b/cayenne-server/src/test/resources/inheritance-vertical.map.xml
@@ -43,6 +43,15 @@
<db-attribute name="ID" type="INTEGER" isPrimaryKey="true" isMandatory="true"/>
<db-attribute name="NAME" type="VARCHAR" length="100"/>
</db-entity>
+ <db-entity name="IV_GEN_KEY_ROOT">
+ <db-attribute name="DISCRIMINATOR" type="VARCHAR" length="10"/>
+ <db-attribute name="ID" type="INTEGER" isPrimaryKey="true" isGenerated="true" isMandatory="true"/>
+ <db-attribute name="NAME" type="VARCHAR" length="100"/>
+ </db-entity>
+ <db-entity name="IV_GEN_KEY_SUB">
+ <db-attribute name="ID" type="INTEGER" isPrimaryKey="true" isMandatory="true"/>
+ <db-attribute name="SUB1_NAME" type="VARCHAR" length="100"/>
+ </db-entity>
<db-entity name="IV_IMPL">
<db-attribute name="ATTR1" type="VARCHAR" length="100"/>
<db-attribute name="ATTR2" type="VARCHAR" length="100"/>
@@ -112,6 +121,14 @@
<qualifier><![CDATA[type = "S"]]></qualifier>
<obj-attribute name="name" type="java.lang.String" db-attribute-path="concrete.NAME"/>
</obj-entity>
+ <obj-entity name="IvGenKeyRoot" className="org.apache.cayenne.testdo.inheritance_vertical.IvGenKeyRoot" dbEntityName="IV_GEN_KEY_ROOT">
+ <obj-attribute name="discriminator" type="java.lang.String" db-attribute-path="DISCRIMINATOR"/>
+ <obj-attribute name="name" type="java.lang.String" db-attribute-path="NAME"/>
+ </obj-entity>
+ <obj-entity name="IvGenKeySub" superEntityName="IvGenKeyRoot" className="org.apache.cayenne.testdo.inheritance_vertical.IvGenKeySub">
+ <qualifier><![CDATA[discriminator = "sub1"]]></qualifier>
+ <attribute-override name="name" db-attribute-path="sub1.SUB1_NAME"/>
+ </obj-entity>
<obj-entity name="IvImpl" superEntityName="IvBase" className="org.apache.cayenne.testdo.inheritance_vertical.IvImpl">
<qualifier><![CDATA[type = "I"]]></qualifier>
<obj-attribute name="attr1" type="java.lang.String" db-attribute-path="impl.ATTR1"/>
@@ -185,6 +202,12 @@
<db-relationship name="abstract" source="IV_CONCRETE" target="IV_ABSTRACT">
<db-attribute-pair source="ID" target="ID"/>
</db-relationship>
+ <db-relationship name="sub1" source="IV_GEN_KEY_ROOT" target="IV_GEN_KEY_SUB" toDependentPK="true">
+ <db-attribute-pair source="ID" target="ID"/>
+ </db-relationship>
+ <db-relationship name="root" source="IV_GEN_KEY_SUB" target="IV_GEN_KEY_ROOT">
+ <db-attribute-pair source="ID" target="ID"/>
+ </db-relationship>
<db-relationship name="base" source="IV_IMPL" target="IV_BASE">
<db-attribute-pair source="ID" target="ID"/>
</db-relationship>