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]

Reply via email to