cayenne-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Tomi NA" <hef...@gmail.com>
Subject very, very serious problem - null values where objects should be
Date Mon, 05 Jun 2006 09:33:49 GMT
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
}

Mime
View raw message