Hi,
I'm facing this problem:  When I do a search over a base class, it
instantiates the correct subclass type, but doesn't retrieve all the
attributes from the subclass, only those that belong to the base class.

These classes and mappings are a simplified version of the original ones,
but respect the main structure.

* I have these classes:

public class BaseClass implements Serializable, Comparable
{
        private int             id1;
        private String          type;
        private int             id2;
 
        //some more attributes
        private int             at1;         

}

public class SubClass extends BaseClass {
        private int             at2;
}

* these custom RowReader (implemented as documentation says):

public class ClassRowReader extends RowReaderDefaultImpl {

        public OUBesoinRowReader(ClassDescriptor a_classDescriptor) {
                super(a_classDescriptor);
        }

        protected ClassDescriptor selectClassDescriptor(Map row) throws
PersistenceBrokerException {
            //Determine type
            String classType = (String) row.get("type");
            if("subclass".equals(classType)){
                return
getClassDescriptor().getRepository().getDescriptorFor(SubClass.class);
            }

             //future subclasses check      
            
            //Throw exception
        throw new Exception("Can't create an object of type '" + classType +
"'");

        }

}


* these mappings:

<class-descriptor class="BaseClass" table="TableA" 
        row-reader="ClassRowReader">
        
        <extent-class class-ref="SubClass" />
        ///future subclasses
        <field-descriptor name="id1" column="COL1" jdbc-type="INTEGER"
primarykey="true" />
        <field-descriptor name="id2" column="COL2" jdbc-type="INTEGER"
primarykey="true" />
        <field-descriptor name="type" column="COL3" jdbc-type="VARCHAR"
primarykey="true" />
        <field-descriptor name="at1" column="COL4" jdbc-type="VARCHAR"/>

</class-descriptor>

<class-descriptor class="SubClass" table="TableA" >
        <field-descriptor name="id1" column="COL1" jdbc-type="INTEGER"
primarykey="true" />
        <field-descriptor name="id2" column="COL2" jdbc-type="INTEGER"
primarykey="true" />
        <field-descriptor name="type" column="COL3" jdbc-type="VARCHAR"
primarykey="true" />
        <field-descriptor name="at1" column="COL4" jdbc-type="INTEGER"/>
        <field-descriptor name="at2" column="COL5" jdbc-type="INTEGER"/>
</class-descriptor>

* ojb-version: 1.0.4

* Query:

                Criteria l_criteria = new Criteria();
                l_criteria.addEqualTo("id1", new Integer(id));
                l_criteria.addEqualTo("type", "Subclass");
                
                QueryByCriteria l_query = new QueryByCriteria(BaseClass.class,
l_criteria);
                //get the broker...

                Collection objects = l_broker.getCollectionByQuery(l_query);


* Logs:  I activated the sql log, and the select generated did bring the
SubClass specific attributes, but for some reason they were not passed to
the rowreader.

Thanks,
Martín.
-- 
View this message in context: 
http://www.nabble.com/Tabler-per-hierarchy-and-custom-objConcreteClass-field-tp18613951p18613951.html
Sent from the Apache DB - ObjectRelationalBridge Users mailing list archive at 
Nabble.com.


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to