I see very disturbing behaviour and while I'm not certain cayenne is
to blame, maybe someone could shed a little light on the subject.
First of all, I'm using 1.2RC1 - inherited the .xml files from
previous versions of 1.2.
I experience what appears to be random null objects in the object
graph. At the moment, I'm debugging the app and am looking at the
following one-to-many relationship...
I have an object myObject whose getToObjectCategory() method should
give me the category of myObject - the method returns null.
In the database (pgsql 8.1.3), I can see that the category is intact -
no problem there. Looking at the myObject state, I can see that it's
persistenceState is set to 3 - so this is not a modification that
happened in memory - I believe the state would be 4 in that case.
What's more, I have a drop-down menu in the GUI where the seemingly
missing object category is present.
A bit of information about my envinomnent...
I'm the only user connected to the database, my app is the only app
accessing the data and no (intentional) data modification takes place.
I generate regular subclasses and custom superclasses (listed bellow)
- the only customization is the addition of change monitoring code (so
that I can bind the beans to my GUI via jgoodies binding).
This is a major problem - I don't know where to start with it... :-(
t.n.a.
#if( ${classGen.isUsingPackage()} )
package ${classGen.packageName};
#end
#if( ${classGen.isContainingDeclaredListProperties()} )
import java.util.List;
#end
/** Class ${classGen.superPrefix}${classGen.className} 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 class ${classGen.superPrefix}${classGen.className} extends
$classGen.superClassName {
// CUSTOM CODE
private java.beans.PropertyChangeSupport propertyChangeSupport =
new java.beans.PropertyChangeSupport(this);
## Create property names
#foreach( $attr in ${classGen.Entity.DeclaredAttributes} )
#set( $classGen.Prop = $attr.Name )## let controller know about current property
public static final String ${classGen.propAsConstantName}_PROPERTY
= "${attr.Name}";
#end
#foreach( $rel in ${classGen.Entity.DeclaredRelationships} )
#set( $classGen.Prop = $rel.Name )## let controller know about current property
public static final String ${classGen.propAsConstantName}_PROPERTY
= "${rel.Name}";
#end
#if( $classGen.Entity.DbEntity )
#foreach( $idAttr in ${classGen.Entity.DbEntity.PrimaryKey} )
#set( $classGen.Prop = $idAttr.Name )## let controller know about
current property
public static final String
${classGen.propAsConstantName}_PK_COLUMN = "${idAttr.Name}";
#end
#end
// CUSTOM CODE
public void addPropertyChangeListener(java.beans.PropertyChangeListener l) {
propertyChangeSupport.addPropertyChangeListener(l);
}
public void
removePropertyChangeListener(java.beans.PropertyChangeListener l) {
propertyChangeSupport.removePropertyChangeListener(l);
}
## Create attribute set/get methods
#foreach( $attr in ${classGen.Entity.DeclaredAttributes} )
#set( $classGen.Prop = $attr.Name )## let controller know about current property
#if ("true" != "${classGen.getEntity().isReadOnly()}")
public void
set${classGen.cappedProp}($classGen.formatJavaType(${attr.Type})
$classGen.formatVariableName(${attr.Name})) {
// CUSTOM CODE
$classGen.formatJavaType(${attr.Type}) staro_${attr.Name} =
($classGen.formatJavaType(${attr.Type}))readProperty("${attr.Name}");
writeProperty("${attr.Name}",
$classGen.formatVariableName(${attr.Name}));
// CUSTOM CODE
propertyChangeSupport.firePropertyChange ("${attr.Name}",
staro_${attr.Name}, ${attr.Name});
}
#end
public $classGen.formatJavaType(${attr.Type}) get${classGen.cappedProp}() {
return ($classGen.formatJavaType(${attr.Type}))readProperty("${attr.Name}");
}
#end
##
## Create list add/remove/get methods
#foreach( $rel in ${classGen.Entity.DeclaredRelationships} )
#set( $classGen.Prop = $rel.Name )## let controller know about current property
#if( $rel.ToMany )
#if ( ! $rel.ReadOnly )
public void
addTo${classGen.cappedProp}($classGen.formatJavaType(${rel.TargetEntity.ClassName})
obj) {
addToManyTarget("${rel.name}", obj, true);
}
public void
removeFrom${classGen.cappedProp}($classGen.formatJavaType(${rel.TargetEntity.ClassName})
obj) {
removeToManyTarget("${rel.name}", obj, true);
}
#end
public List get${classGen.cappedProp}() {
return (List)readProperty("${rel.name}");
}
#else
#if ( !${classGen.getEntity().isReadOnly()} && !$rel.ReadOnly )
public void
set${classGen.cappedProp}($classGen.formatJavaType(${rel.TargetEntity.ClassName})
$classGen.formatVariableName(${rel.name})) {
// SHOULD ADD CUSTOM CODE, TODO
setToOneTarget("${rel.name}",
$classGen.formatVariableName(${rel.name}), true);
}
#end
public $classGen.formatJavaType(${rel.TargetEntity.ClassName})
get${classGen.cappedProp}() {
return ($classGen.formatJavaType(${rel.TargetEntity.ClassName}))readProperty("${rel.name}");
}
#end
#end
}
This archive was generated by hypermail 2.0.0 : Mon Jun 05 2006 - 05:34:17 EDT