The bug #3496 is marked resolved, but I'm not sure it is. The attached
patch makes sure that when the object is populated by the peer that keys
are set to null and not to a key containing a null value. Particularly
in the case of foreign keys, it is plausible to have a null value. This
fix makes checks for null work with key fields - as occurs in the gets
for associated objects. Thus this fix seems to address the problem
described in bug #3496.
Scott Finnerty
Index: Peer.vm
===================================================================
RCS file: /home/cvspublic/jakarta-turbine-torque/src/templates/om/Peer.vm,v
retrieving revision 1.30
diff -u -r1.30 Peer.vm
--- Peer.vm 28 May 2002 01:00:16 -0000 1.30
+++ Peer.vm 31 May 2002 14:33:14 -0000
@@ -337,8 +337,23 @@
#end
#else
#if ($col.isPrimaryKey() || $col.isForeignKey() )
- obj.set${col.JavaName}(
- new ${col.JavaNative}(row.getValue(offset + $n).$col.VillageMethod));
+ ## The field should always be an Object type but make sure so we
+ ## are sure we can set it to null.
+ if ( row.getValue(offset+$n).$col.VillageMethod instanceof Object )
+ {
+ ## If the database value is a null value then set the Key
+ ## value to null so comparisons with ObjectUtils.equals really work.
+ if ( null == row.getValue(offset+$n).$col.VillageMethod )
+ {
+ obj.set${col.JavaName}( (${col.JavaNative}) null );
+ }
+ else
+ ## Do what we normally do
+ {
+ obj.set${col.JavaName}(
+ new
+${col.JavaNative}(row.getValue(offset+$n).$col.VillageMethod));
+ }
+ }
#else
obj.set${col.JavaName}(row.getValue(offset + $n).$col.VillageMethod);
#end
Index: Peer.vm
===================================================================
RCS file: /home/cvspublic/jakarta-turbine-torque/src/templates/om/Peer.vm,v
retrieving revision 1.30
diff -u -r1.30 Peer.vm
--- Peer.vm 28 May 2002 01:00:16 -0000 1.30
+++ Peer.vm 31 May 2002 14:33:14 -0000
@@ -337,8 +337,23 @@
#end
#else
#if ($col.isPrimaryKey() || $col.isForeignKey() )
- obj.set${col.JavaName}(
- new ${col.JavaNative}(row.getValue(offset + $n).$col.VillageMethod));
+ ## The field should always be an Object type but make sure so we
+ ## are sure we can set it to null.
+ if ( row.getValue(offset+$n).$col.VillageMethod instanceof Object )
+ {
+ ## If the database value is a null value then set the Key
+ ## value to null so comparisons with ObjectUtils.equals really work.
+ if ( null == row.getValue(offset+$n).$col.VillageMethod )
+ {
+ obj.set${col.JavaName}( (${col.JavaNative}) null );
+ }
+ else
+ ## Do what we normally do
+ {
+ obj.set${col.JavaName}(
+ new
+${col.JavaNative}(row.getValue(offset+$n).$col.VillageMethod));
+ }
+ }
#else
obj.set${col.JavaName}(row.getValue(offset + $n).$col.VillageMethod);
#end
--
To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>