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]