Author: tfischer
Date: Sun Jan 23 03:40:45 2011
New Revision: 1062315

URL: http://svn.apache.org/viewvc?rev=1062315&view=rev
Log:
Fix: When saving a new object with an autogenerated primary key, but the 
primary key attribute was set explicitly on the object before saving, the set 
primary key should be used instead of replacing it by a new autogenerated key

Modified:
    
db/torque/torque4/trunk/torque-templates/src/main/resources/org/apache/torque/templates/om/templates/peer/base/buildColumnValues.vm
    
db/torque/torque4/trunk/torque-templates/src/main/resources/org/apache/torque/templates/om/templates/peer/base/doInsert.vm
    db/torque/torque4/trunk/torque-test/src/main/schema/test-schema.xml
    
db/torque/torque4/trunk/torque-test/src/test/java/org/apache/torque/DataTest.java

Modified: 
db/torque/torque4/trunk/torque-templates/src/main/resources/org/apache/torque/templates/om/templates/peer/base/buildColumnValues.vm
URL: 
http://svn.apache.org/viewvc/db/torque/torque4/trunk/torque-templates/src/main/resources/org/apache/torque/templates/om/templates/peer/base/buildColumnValues.vm?rev=1062315&r1=1062314&r2=1062315&view=diff
==============================================================================
--- 
db/torque/torque4/trunk/torque-templates/src/main/resources/org/apache/torque/templates/om/templates/peer/base/buildColumnValues.vm
 (original)
+++ 
db/torque/torque4/trunk/torque-templates/src/main/resources/org/apache/torque/templates/om/templates/peer/base/buildColumnValues.vm
 Sun Jan 23 03:40:45 2011
@@ -45,8 +45,15 @@
   #set ( $columnSchemaType = $columnElement.getAttribute("schemaType") )
   #set ( $columnFieldName = $columnElement.getAttribute("field") )
   #set ( $columnFieldType = $columnElement.getAttribute("fieldType") )
+  #set ( $javaType = $columnElement.getAttribute("javaType") )
   #if ($primaryKey && !$idMethod.equals("none"))
+    #if ("boolean" == $columnFieldType)
         if (!${field}.isNew())
+    #elseif ("primitive" == $javaType)
+        if (!${field}.isNew() || ${field}.$getter() != 0)
+    #else
+        if (!${field}.isNew() || ${field}.$getter() != null)
+    #end
         {
     #if ($columnType == "DATE" && $columnFieldType == "java.util.Date")
             java.util.Date $columnFieldName = ${field}.${getter}();

Modified: 
db/torque/torque4/trunk/torque-templates/src/main/resources/org/apache/torque/templates/om/templates/peer/base/doInsert.vm
URL: 
http://svn.apache.org/viewvc/db/torque/torque4/trunk/torque-templates/src/main/resources/org/apache/torque/templates/om/templates/peer/base/doInsert.vm?rev=1062315&r1=1062314&r2=1062315&view=diff
==============================================================================
--- 
db/torque/torque4/trunk/torque-templates/src/main/resources/org/apache/torque/templates/om/templates/peer/base/doInsert.vm
 (original)
+++ 
db/torque/torque4/trunk/torque-templates/src/main/resources/org/apache/torque/templates/om/templates/peer/base/doInsert.vm
 Sun Jan 23 03:40:45 2011
@@ -61,8 +61,12 @@
   #if ($idMethod.equals("none") || 
$torqueGen.getChild("primary-keys").getChildren("column").isEmpty())
         ${peerClassName}.doInsert(${peerClassName}.buildColumnValues(obj), 
con);
   #else
-        obj.setPrimaryKey(${peerClassName}.doInsert(
-                ${peerClassName}.buildColumnValues(obj), con));
+        ObjectKey primaryKey = ${peerClassName}.doInsert(
+                ${peerClassName}.buildColumnValues(obj), con);
+        if (primaryKey != null)
+        {
+            obj.setPrimaryKey(primaryKey);
+        }
   #end
         obj.setNew(false);
         obj.setModified(false);

Modified: db/torque/torque4/trunk/torque-test/src/main/schema/test-schema.xml
URL: 
http://svn.apache.org/viewvc/db/torque/torque4/trunk/torque-test/src/main/schema/test-schema.xml?rev=1062315&r1=1062314&r2=1062315&view=diff
==============================================================================
--- db/torque/torque4/trunk/torque-test/src/main/schema/test-schema.xml 
(original)
+++ db/torque/torque4/trunk/torque-test/src/main/schema/test-schema.xml Sun Jan 
23 03:40:45 2011
@@ -222,6 +222,11 @@
     <column name="name" size="100" type="VARCHAR"/>
   </table>
 
+  <table name="integer_object_pk">
+    <column name="id" type="INTEGER" primaryKey="true" required="true" 
javaType="object"/>
+    <column name="name" size="100" type="VARCHAR"/>
+  </table>
+
   <table name="bit_test" idMethod="none">
     <column name="id" required="true" primaryKey="true" type="CHAR" size="10" 
/>
     <column name="bit_value" required="true" type="BIT" />

Modified: 
db/torque/torque4/trunk/torque-test/src/test/java/org/apache/torque/DataTest.java
URL: 
http://svn.apache.org/viewvc/db/torque/torque4/trunk/torque-test/src/test/java/org/apache/torque/DataTest.java?rev=1062315&r1=1062314&r2=1062315&view=diff
==============================================================================
--- 
db/torque/torque4/trunk/torque-test/src/test/java/org/apache/torque/DataTest.java
 (original)
+++ 
db/torque/torque4/trunk/torque-test/src/test/java/org/apache/torque/DataTest.java
 Sun Jan 23 03:40:45 2011
@@ -83,6 +83,8 @@ import org.apache.torque.test.Inheritanc
 import org.apache.torque.test.InheritanceChildD;
 import org.apache.torque.test.InheritanceTest;
 import org.apache.torque.test.InheritanceTestPeer;
+import org.apache.torque.test.IntegerObjectPk;
+import org.apache.torque.test.IntegerObjectPkPeer;
 import org.apache.torque.test.IntegerPk;
 import org.apache.torque.test.IntegerPkPeer;
 import org.apache.torque.test.LargePk;
@@ -189,6 +191,30 @@ public class DataTest extends BaseRuntim
         bc.setBintValue(false);
         bc.setBcharValue(false);
         bc.save();
+        
+        // check a primitive id can be set manually
+        Author author = new Author();
+        author.setAuthorId(2000);
+        author.setName("Author 2000");
+        author.save();
+        assertEquals(2000, author.getAuthorId());
+        criteria = new Criteria();
+        criteria.add(AuthorPeer.AUTHOR_ID, 2000);
+        List<Author> authorList = AuthorPeer.doSelect(criteria);
+        assertEquals(1, authorList.size());
+        
+        // check an object id can be set manually
+        criteria = new Criteria();
+        IntegerObjectPkPeer.doDelete(criteria);
+        IntegerObjectPk integerObjectPk = new IntegerObjectPk();
+        integerObjectPk.setId(3001);
+        integerObjectPk.save();
+        assertEquals(new Integer(3001), integerObjectPk.getId());
+        criteria = new Criteria();
+        criteria.add(IntegerObjectPkPeer.ID, 3001);
+        List<IntegerObjectPk> integerObjectPkList 
+                = IntegerObjectPkPeer.doSelect(criteria);
+        assertEquals(1, integerObjectPkList.size());
     }
 
     /**



---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to