You are viewing a plain text version of this content. The canonical link for it is here.
Posted to ojb-user@db.apache.org by Piet Molenaar <p....@amc.uva.nl> on 2005/06/08 10:40:59 UTC

Re: Inheritance on multiple tables produces base class instances

The release notes: the one place I should have looked but did not! ;)
I hope this can be fixed in the next release otherwise I have to elaborate 
on the current work-around.

All the best and thanks for the efforts,
Piet

At 10:43 PM 6/7/2005, you wrote:
>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: ojb-user-unsubscribe@db.apache.org
>>For additional commands, e-mail: ojb-user-help@db.apache.org
>>
>
>
>---------------------------------------------------------------------
>To unsubscribe, e-mail: ojb-user-unsubscribe@db.apache.org
>For additional commands, e-mail: ojb-user-help@db.apache.org
>


---------------------------------------------------------------------
To unsubscribe, e-mail: ojb-user-unsubscribe@db.apache.org
For additional commands, e-mail: ojb-user-help@db.apache.org