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 2020/04/06 16:43:03 UTC

[cayenne] 01/06: CAY-2652 New flush action: unable to use meaningful FK mapped to primitive type

This is an automated email from the ASF dual-hosted git repository.

ntimofeev pushed a commit to branch STABLE-4.1
in repository https://gitbox.apache.org/repos/asf/cayenne.git

commit 2c737438191f356b039bb00d7e8b4b58bed7e3e8
Author: Nikita Timofeev <st...@gmail.com>
AuthorDate: Tue Mar 31 18:36:55 2020 +0300

    CAY-2652 New flush action: unable to use meaningful FK mapped to primitive type
---
 .../java/org/apache/cayenne/MeaningfulFKIT.java     | 21 ++++++++++++++++-----
 .../testdo/relationships/auto/_MeaningfulFK.java    | 12 ++++++------
 .../src/test/resources/cayenne-relationships.xml    |  2 ++
 .../src/test/resources/relationships.map.xml        | 17 +++++++++++++++--
 4 files changed, 39 insertions(+), 13 deletions(-)

diff --git a/cayenne-server/src/test/java/org/apache/cayenne/MeaningfulFKIT.java b/cayenne-server/src/test/java/org/apache/cayenne/MeaningfulFKIT.java
index f11552c..c87c7d0 100644
--- a/cayenne-server/src/test/java/org/apache/cayenne/MeaningfulFKIT.java
+++ b/cayenne-server/src/test/java/org/apache/cayenne/MeaningfulFKIT.java
@@ -20,6 +20,7 @@
 package org.apache.cayenne;
 
 import org.apache.cayenne.di.Inject;
+import org.apache.cayenne.query.SelectById;
 import org.apache.cayenne.testdo.relationships.MeaningfulFK;
 import org.apache.cayenne.testdo.relationships.RelationshipHelper;
 import org.apache.cayenne.unit.di.server.CayenneProjects;
@@ -28,9 +29,7 @@ import org.apache.cayenne.unit.di.server.UseServerRuntime;
 import org.apache.cayenne.validation.ValidationResult;
 import org.junit.Test;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.*;
 
 @UseServerRuntime(CayenneProjects.RELATIONSHIPS_PROJECT)
 public class MeaningfulFKIT extends ServerCase {
@@ -57,12 +56,24 @@ public class MeaningfulFKIT extends ServerCase {
     public void testValidateForSave2() throws Exception {
         MeaningfulFK testObject = context.newObject(MeaningfulFK.class);
 
-        RelationshipHelper related = testObject.getObjectContext().newObject(
-                RelationshipHelper.class);
+        RelationshipHelper related = context.newObject(RelationshipHelper.class);
         testObject.setToRelationshipHelper(related);
 
         ValidationResult validation = new ValidationResult();
         testObject.validateForSave(validation);
         assertFalse(validation.hasFailures());
     }
+
+    @Test
+    public void testMeaningfulFKSet() {
+        MeaningfulFK testObject = context.newObject(MeaningfulFK.class);
+
+        RelationshipHelper related = context.newObject(RelationshipHelper.class);
+        testObject.setToRelationshipHelper(related);
+
+        context.commitChanges();
+
+        MeaningfulFK testObject2 = SelectById.query(MeaningfulFK.class, testObject.getObjectId()).selectOne(context);
+        assertNotEquals(0, testObject2.getRelationshipHelperID());
+    }
 }
diff --git a/cayenne-server/src/test/java/org/apache/cayenne/testdo/relationships/auto/_MeaningfulFK.java b/cayenne-server/src/test/java/org/apache/cayenne/testdo/relationships/auto/_MeaningfulFK.java
index a14eece..31da394 100644
--- a/cayenne-server/src/test/java/org/apache/cayenne/testdo/relationships/auto/_MeaningfulFK.java
+++ b/cayenne-server/src/test/java/org/apache/cayenne/testdo/relationships/auto/_MeaningfulFK.java
@@ -23,16 +23,16 @@ public abstract class _MeaningfulFK extends BaseDataObject {
     public static final Property<Integer> RELATIONSHIP_HELPER_ID = Property.create("relationshipHelperID", Integer.class);
     public static final Property<RelationshipHelper> TO_RELATIONSHIP_HELPER = Property.create("toRelationshipHelper", RelationshipHelper.class);
 
-    protected Integer relationshipHelperID;
+    protected int relationshipHelperID;
 
     protected Object toRelationshipHelper;
 
-    public void setRelationshipHelperID(Integer relationshipHelperID) {
+    public void setRelationshipHelperID(int relationshipHelperID) {
         beforePropertyWrite("relationshipHelperID", this.relationshipHelperID, relationshipHelperID);
         this.relationshipHelperID = relationshipHelperID;
     }
 
-    public Integer getRelationshipHelperID() {
+    public int getRelationshipHelperID() {
         beforePropertyRead("relationshipHelperID");
         return this.relationshipHelperID;
     }
@@ -69,7 +69,7 @@ public abstract class _MeaningfulFK extends BaseDataObject {
 
         switch (propName) {
             case "relationshipHelperID":
-                this.relationshipHelperID = (Integer)val;
+                this.relationshipHelperID = val == null ? 0 : (int)val;
                 break;
             case "toRelationshipHelper":
                 this.toRelationshipHelper = val;
@@ -90,14 +90,14 @@ public abstract class _MeaningfulFK extends BaseDataObject {
     @Override
     protected void writeState(ObjectOutputStream out) throws IOException {
         super.writeState(out);
-        out.writeObject(this.relationshipHelperID);
+        out.writeInt(this.relationshipHelperID);
         out.writeObject(this.toRelationshipHelper);
     }
 
     @Override
     protected void readState(ObjectInputStream in) throws IOException, ClassNotFoundException {
         super.readState(in);
-        this.relationshipHelperID = (Integer)in.readObject();
+        this.relationshipHelperID = in.readInt();
         this.toRelationshipHelper = in.readObject();
     }
 
diff --git a/cayenne-server/src/test/resources/cayenne-relationships.xml b/cayenne-server/src/test/resources/cayenne-relationships.xml
index 90524b9..6205fb2 100644
--- a/cayenne-server/src/test/resources/cayenne-relationships.xml
+++ b/cayenne-server/src/test/resources/cayenne-relationships.xml
@@ -1,5 +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 https://cayenne.apache.org/schema/10/domain.xsd"
 	 project-version="10">
 	<map name="relationships"/>
 </domain>
diff --git a/cayenne-server/src/test/resources/relationships.map.xml b/cayenne-server/src/test/resources/relationships.map.xml
index 55b9fda..b487db9 100644
--- a/cayenne-server/src/test/resources/relationships.map.xml
+++ b/cayenne-server/src/test/resources/relationships.map.xml
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <data-map xmlns="http://cayenne.apache.org/schema/10/modelMap"
 	 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-	 xsi:schemaLocation="http://cayenne.apache.org/schema/10/modelMap http://cayenne.apache.org/schema/10/modelMap.xsd"
+	 xsi:schemaLocation="http://cayenne.apache.org/schema/10/modelMap https://cayenne.apache.org/schema/10/modelMap.xsd"
 	 project-version="10">
 	<property name="defaultPackage" value="org.apache.cayenne.testdo.relationships"/>
 	<db-entity name="FK_OF_DIFFERENT_TYPE">
@@ -24,7 +24,7 @@
 	</db-entity>
 	<obj-entity name="FkOfDifferentType" className="org.apache.cayenne.testdo.relationships.FkOfDifferentType" dbEntityName="FK_OF_DIFFERENT_TYPE"/>
 	<obj-entity name="MeaningfulFK" className="org.apache.cayenne.testdo.relationships.MeaningfulFK" dbEntityName="MEANINGFUL_FK">
-		<obj-attribute name="relationshipHelperID" type="java.lang.Integer" db-attribute-path="RELATIONSHIP_HELPER_ID"/>
+		<obj-attribute name="relationshipHelperID" type="int" db-attribute-path="RELATIONSHIP_HELPER_ID"/>
 	</obj-entity>
 	<obj-entity name="ReflexiveAndToOne" className="org.apache.cayenne.testdo.relationships.ReflexiveAndToOne" dbEntityName="REFLEXIVE_AND_TO_ONE">
 		<obj-attribute name="name" type="java.lang.String" db-attribute-path="NAME"/>
@@ -64,4 +64,17 @@
 	<obj-relationship name="fksOfDifferentType" source="RelationshipHelper" target="FkOfDifferentType" db-relationship-path="fksOfDifferentType"/>
 	<obj-relationship name="meanigfulFKs" source="RelationshipHelper" target="MeaningfulFK" db-relationship-path="meanigfulFKs"/>
 	<obj-relationship name="reflexiveAndToOneArray" source="RelationshipHelper" target="ReflexiveAndToOne" db-relationship-path="reflexiveAndToOneArray"/>
+	<cgen xmlns="http://cayenne.apache.org/schema/10/cgen">
+		<destDir>..\java</destDir>
+		<mode>entity</mode>
+		<template>templates/v4_1/subclass.vm</template>
+		<superTemplate>templates/v4_1/superclass.vm</superTemplate>
+		<outputPattern>*.java</outputPattern>
+		<makePairs>true</makePairs>
+		<usePkgPath>true</usePkgPath>
+		<overwrite>false</overwrite>
+		<createPropertyNames>false</createPropertyNames>
+		<createPKProperties>false</createPKProperties>
+		<client>false</client>
+	</cgen>
 </data-map>