db-ojb-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Piet Molenaar <p.molen...@amc.uva.nl>
Subject Inheritance on multiple tables produces base class instances
Date Tue, 07 Jun 2005 09:03:11 GMT
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


Mime
View raw message