db-ojb-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Michael Baetgen <mich...@baetgen.com>
Subject Re: Inheritance on multiple tables produces base class instances
Date Tue, 07 Jun 2005 20:43:54 GMT
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


Mime
View raw message