Hi Piet,
the work-around was only a suggestion to solve the problem temporary
(for my case, it works well).
I think this is a known issue (see
http://db.apache.org/ojb/release-notes.txt), that will be fixed in
version 1.0.4 (correct me if I am wrong ;-)
Best regards,
Michael
Piet Molenaar schrieb:
Hi All,
I've implemented inheritance on multiple tables and it works fine for
inserting data. (see code snippets below)
(ojb is a great initiative and its elegance saves a lot of work!)
However, a problem arose when I tried to query for a dao without
knowing beforehand which type of object I will retrieve;
loading a referenced object always produces base class instances.
I've been looking around the archives and found this thread but the
last post mentioned a work-around by
storing an additional id
http://nagoya.apache.org/eyebrowse/BrowseList?listId=107&by=thread&from=899091
Is this regular behavior or am I missing something (I can imagine that
proxy="dynamic" does not work?)
Thanks a lot in advance!
Piet
Explanation:
A source has a type of interaction which can be of a subtype
proteininteraction (in fact it is an inheritance tree of several types).
When querying the source with a proteininteraction for its
interactiontype I always get the base class InteractionTypeInterface
retrieved.
I'm using OJB 1.0.3
// Dao's
public class Source
implements SourceInterface
{
private Integer dataid;
private String sourceid;
private InteractionTypeInterface interactiontype;
public Source()
{
targets = new Vector();
interactiontype = new InteractionType();
datatype = new DataType();
origin = new Origin();
}
//getters/setters
}
public class InteractionType implements InteractionTypeInterface,
DAOInterface
{
protected Integer interactiontypeid;
protected String interactioninfo;
//getters/setters
}
public class ProteinInteractionType extends InteractionType implements
ProteinInteractionTypeInterface
{
protected String proteininteractioninfo;
//getters/setters
}
// Repository
<!-- Source contains the information about the datasource -->
<class-descriptor
class="amcplugin.data.persistency.Source"
proxy="dynamic"
table="SOURCE"
>
<field-descriptor id="1"
name="dataid"
column="DATA_ID"
jdbc-type="INTEGER"
primarykey="true"
autoincrement="true"
/>
<field-descriptor id="6"
name="interactiontypeid"
column="INTERACTION_TYPE_ID"
jdbc-type="INTEGER"
access="anonymous"
/>
<reference-descriptor name="interactiontype"
class-ref="amcplugin.data.persistency.InteractionType"
auto-retrieve="true"
auto-update="true"
auto-delete="false"
>
<foreignkey field-ref="interactiontypeid"/>
</reference-descriptor>
</class-descriptor>
<!-- InteractionType links the id to the type of Interaction -->
<class-descriptor
class="amcplugin.data.persistency.InteractionType"
proxy="dynamic"
table="INTERACTION_TYPE"
>
<field-descriptor id="1"
name="interactiontypeid"
column="INTERACTION_TYPE_ID"
jdbc-type="INTEGER"
autoincrement="true"
primarykey="true"
/>
<field-descriptor id="2"
name="interactioninfo"
column="INTERACTION_INFO"
jdbc-type="VARCHAR"
/>
</class-descriptor>
<!-- ProteinInteractionInfo gives type of proteininteraction -->
<class-descriptor
class="amcplugin.data.persistency.ProteinInteractionType"
proxy="dynamic"
table="PROTEIN_INTERACTION_TYPE"
>
<field-descriptor id="1"
name="interactiontypeid"
column="INTERACTION_TYPE_ID"
jdbc-type="INTEGER"
autoincrement="true"
primarykey="true"
/>
<field-descriptor id="2"
name="proteininteractioninfo"
column="PROTEIN_INTERACTION_INFO"
jdbc-type="VARCHAR"
/>
<reference-descriptor name="super"
class-ref="amcplugin.data.persistency.InteractionType"
auto-retrieve="true"
auto-update="true"
auto-delete="object"
>
<foreignkey field-ref="interactiontypeid"/>
</reference-descriptor>
</class-descriptor>
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]