Hi Armin,

I was able to locate the code in the OJB source.
However there are a few things that I cannot understand.
Why do we have composite primary keys for the Employee, Executive and Manager 
entities ? 


Thanks and Regards,
Gautam.

On Tue, 28 Nov 2006 Virgo Smart wrote :
>
>Hi Armin,
>
>Thank you for point me to the test case method. I had a look through the 
>testInheritancedObjectsInCollectionReferences method and it seems to me that 
>it replicates the scenario I have been facing issues with.
>
>Could you please send me the repository.xml descriptor, the Torque schema (if 
>available) and the Java source files to enable me to simulate the scenario at 
>my end ?
>
>Thanks a lot for all your help and support.
>
>Regards,
>Gautam.
>
>On Tue, 28 Nov 2006 Armin Waibel wrote :
> >Hi Gautam,
> >
> >Virgo Smart wrote:
> >>Hello,
> >>
> >>I tried out the problem again by making changes to the class-descriptors 
> >>and schema as per Armin's suggestions and the "Advanced O/R Mapping 
> >>Technique" tutorial (Apache OJB site). However the persistence broker still 
> >>returns instances of Thing class instead of the Book and Toy in the 
> >>stuffInDrawer collection of the Drawer class.
> >>
> >>If there are any aspects that I might have over-looked, please point them 
> >>out. Note that Thing is a concrete class in my case.
> >>
> >
> >You need OJB 1.0.4 or the latest version from OJB_1_0_RELEASE branch.
> >
> >In OJB test-suite you can find a test called 
> >InheritanceMultipleTableTest#testInheritancedObjectsInCollectionReferences
> >which tests exactly your described scenario.
> >http://svn.apache.org/viewvc/db/ojb/branches/OJB_1_0_RELEASE/src/test/org/apache/ojb/broker/InheritanceMultipleTableTest.java?view=markup
> >
> >This test pass with all databases I use for testing (hsql, mysql, maxDB, 
> >OracleXE).
> >
> >
> >>I am thinking about modifying the OJB source code to fix this 
> >>extent-awareness problem satisfactorily. However I would need some guidance 
> >>in helping me understand how OJB creates SQLs in context of repository.xml 
> >>(descriptors) and how RowReader and RsIterator is used in creating 
> >>instances of concrete classes.
> >>
> >>Could any please help me understand the concepts related to SQL building, 
> >>RowReader and RsIterator and how the current implementation behaves ? Does 
> >>anyone have a sequence-diagram / activity diagram to illustrate the logic 
> >>involved ?
> >>
> >>I am thinking on the lines of using the class-descriptor to look out of 
> >>extent-class definitions for the class whose data in being read and in the 
> >>process of being materialized. If I find an extent-class, I would then look 
> >>in to the table mapped to this extent class for row-entry (using PK or 
> >>PK/FK as the search criteria) and then decide which object instance to 
> >>materialize.
> >>I am not sure if this is the right way to go. Any advise or help on this is 
> >>highly appreciated.
> >>
> >
> >I think there is no "extent-awareness problem" referring your Drawer-test. 
> >In InheritanceMultipleTableTest you can find many tests testing 
> >TPS-inheritance - only one specific scenario fail.
> >
> >regards,
> >Armin
> >
> >>Thank you for all the support.
> >>
> >>Regards,
> >>Gautam.
> >>
> >>
> >>On Wed, 22 Nov 2006 Virgo Smart wrote :
> >>>Hello Armin,
> >>>
> >>>Apologies for posting a repeat of a similar problem as mentioned in an 
> >>>earlier post. I had already posted this one before I recieved the reply to 
> >>>the earlier one.
> >>>
> >>>Looking at the modified class descriptor, I see that the extent-class and 
> >>>anonymous fields are being dropped. I think this is ok. However I am not 
> >>>sure if the "super" reference descriptor can point to the primary key 
> >>>field descriptor of the parent class.
> >>>
> >>>Wouldn't this mean that the PK in the BOOKS / TOYS table would also need 
> >>>to be a FK pointing to the PK of the THINGS table ? Wouldn't this be 
> >>>illegal in SQL ?
> >>>
> >>>Thanks and Regards,
> >>>Gautam
> >>>
> >>>
> >>>On Wed, 22 Nov 2006 Armin Waibel wrote :
> >>>>Hi Gautam,
> >>>>
> >>>>as said in my previous post in thread "OJB: Identity equals method impl." 
> >>>>you should use the "normal" TPS inheritance without a FK field and 
> >>>>without "extent-class" declaration within TPS (and don't override fields 
> >>>>in the sub-classes):
> >>>>
> >>>><class-descriptor
> >>>>     class="Thing"
> >>>>     table="THINGS">
> >>>>
> >>>>     <field-descriptor
> >>>>         name="id"
> >>>>         column="ID"
> >>>>         jdbc-type="INTEGER"
> >>>>         primarykey="true"
> >>>>         autoincrement="true"
> >>>>         />
> >>>>
> >>>>     <field-descriptor
> >>>>         name="name"
> >>>>         column="NAME"
> >>>>         jdbc-type="VARCHAR"
> >>>>         size="255"
> >>>>         />
> >>>>
> >>>>     <field-descriptor
> >>>>         name="drawerId"
> >>>>         column="DRAWER_ID"
> >>>>         jdbc-type="INTEGER"
> >>>>         access="anonymous"
> >>>>         />
> >>>>
> >>>></class-descriptor>
> >>>>
> >>>><class-descriptor
> >>>>     class="Toy"
> >>>>     table="TOYS">
> >>>>
> >>>>     <field-descriptor
> >>>>         name="id"
> >>>>         column="ID"
> >>>>         jdbc-type="INTEGER"
> >>>>         primarykey="true"
> >>>>         autoincrement="false"
> >>>>         />
> >>>>
> >>>>     <field-descriptor
> >>>>         name="category"
> >>>>         column="CATEGORY"
> >>>>         jdbc-type="VARCHAR"
> >>>>         size="255"
> >>>>         />
> >>>>     </field-descriptor>
> >>>>
> >>>>     <reference-descriptor
> >>>>         name="super"
> >>>>         class-ref="Thing"
> >>>>     >
> >>>>         <foreignkey field-ref="id"/>
> >>>>     </reference-descriptor>
> >>>>
> >>>></class-descriptor>
> >>>>
> >>>><class-descriptor
> >>>>     class="Book"
> >>>>     table="BOOKS">
> >>>>
> >>>>     <field-descriptor
> >>>>         name="id"
> >>>>         column="ID"
> >>>>         jdbc-type="INTEGER"
> >>>>         primarykey="true"
> >>>>         autoincrement="false"
> >>>>         />
> >>>>
> >>>>     <field-descriptor
> >>>>         name="author"
> >>>>         column="AUTHOR"
> >>>>         jdbc-type="VARCHAR"
> >>>>         size="255"
> >>>>         />
> >>>>
> >>>>     <field-descriptor
> >>>>         name="isbnCode"
> >>>>         column="ISBN_CODE"
> >>>>         jdbc-type="VARCHAR"
> >>>>         size="255"
> >>>>         />
> >>>>
> >>>>     </field-descriptor>
> >>>>
> >>>>     <reference-descriptor
> >>>>         name="super"
> >>>>         class-ref="Thing"
> >>>>     >
> >>>>         <foreignkey field-ref="id"/>
> >>>>     </reference-descriptor>
> >>>>
> >>>></class-descriptor>
> >>>>
> >>>>
> >>>><class-descriptor
> >>>>     class="Drawer"
> >>>>     table="DRAWER">
> >>>>
> >>>>     <field-descriptor
> >>>>         name="id"
> >>>>         column="id"
> >>>>         jdbc-type="INTEGER"
> >>>>         primarykey="true"
> >>>>         autoincrement="true"
> >>>>         />
> >>>>
> >>>>     <collection-descriptor
> >>>>         name="stuffInDrawer"
> >>>>         element-class-ref="Thing"
> >>>>         >
> >>>>         <inverse-foreignkey field-ref="drawerId"/>
> >>>>     </collection-descriptor>
> >>>></class-descriptor>
> >>>>
> >>>>
> >>>>The FK field "drawerId" in class Thing (of the 1:n reference in Drawer) 
> >>>>is declared as anonymous. Please read carefully the section about how 
> >>>>anonymous keys work to avoid problems
> >>>>http://db.apache.org/ojb/docu/guides/advanced-technique.html#How+do
> >>>>
> >>>>regards,
> >>>>Armin
> >>>>
> >>>>Virgo Smart wrote:
> >>>>>Hello,
> >>>>>
> >>>>>I am facing an issue when trying to retrieve the Drawer object.
> >>>>>Instead of retrieving a collection of Toy and Book instances in the 
> >>>>>stuffInDrawer attribute, collection containing Thing instances is 
> >>>>>returned.
> >>>>>
> >>>>>Following is the class descriptor that is used.
> >>>>>
> >>>>><class-descriptor
> >>>>>     class="Thing"
> >>>>>     table="THINGS">
> >>>>>
> >>>>>    <extent-class class-ref="Toy"/>
> >>>>>    <extent-class class-ref="Book"/>
> >>>>>
> >>>>>     <field-descriptor
> >>>>>         name="id"
> >>>>>         column="ID"
> >>>>>         jdbc-type="INTEGER"
> >>>>>         primarykey="true"
> >>>>>         autoincrement="true"
> >>>>>         />
> >>>>>
> >>>>>     <field-descriptor
> >>>>>         name="name"
> >>>>>         column="NAME"
> >>>>>         jdbc-type="VARCHAR"
> >>>>>         size="255"
> >>>>>         />
> >>>>>
> >>>>>     <field-descriptor
> >>>>>         name="drawerId"
> >>>>>         column="DRAWER_ID"
> >>>>>         jdbc-type="INTEGER"
> >>>>>         access="anonymous"
> >>>>>         />
> >>>>>
> >>>>></class-descriptor>
> >>>>>
> >>>>><class-descriptor
> >>>>>     class="Toy"
> >>>>>     table="TOYS">
> >>>>>
> >>>>>     <field-descriptor
> >>>>>         name="id"
> >>>>>         column="ID"
> >>>>>         jdbc-type="INTEGER"
> >>>>>         primarykey="true"
> >>>>>         autoincrement="true"
> >>>>>         />
> >>>>>
> >>>>>     <field-descriptor
> >>>>>         name="category"
> >>>>>         column="CATEGORY"
> >>>>>         jdbc-type="VARCHAR"
> >>>>>         size="255"
> >>>>>         />
> >>>>>
> >>>>>     <field-descriptor
> >>>>>         name="parentThingId"
> >>>>>         column="THING_ID"
> >>>>>         jdbc-type="BIGINT"
> >>>>>         access="anonymous"
> >>>>>     >
> >>>>>     </field-descriptor>
> >>>>>
> >>>>>     <reference-descriptor
> >>>>>         name="super"
> >>>>>         class-ref="Thing"
> >>>>>     >
> >>>>>         <foreignkey field-ref="parentThingId"/>
> >>>>>     </reference-descriptor>
> >>>>>
> >>>>></class-descriptor>
> >>>>>
> >>>>><class-descriptor
> >>>>>     class="Book"
> >>>>>     table="BOOKS">
> >>>>>
> >>>>>     <field-descriptor
> >>>>>         name="id"
> >>>>>         column="ID"
> >>>>>         jdbc-type="INTEGER"
> >>>>>         primarykey="true"
> >>>>>         autoincrement="true"
> >>>>>         />
> >>>>>
> >>>>>     <field-descriptor
> >>>>>         name="author"
> >>>>>         column="AUTHOR"
> >>>>>         jdbc-type="VARCHAR"
> >>>>>         size="255"
> >>>>>         />
> >>>>>
> >>>>>     <field-descriptor
> >>>>>         name="isbnCode"
> >>>>>         column="ISBN_CODE"
> >>>>>         jdbc-type="VARCHAR"
> >>>>>         size="255"
> >>>>>         />
> >>>>>
> >>>>>     <field-descriptor
> >>>>>         name="parentThingId"
> >>>>>         column="THING_ID"
> >>>>>         jdbc-type="BIGINT"
> >>>>>         access="anonymous"
> >>>>>     >
> >>>>>     </field-descriptor>
> >>>>>
> >>>>>     <reference-descriptor
> >>>>>         name="super"
> >>>>>         class-ref="Thing"
> >>>>>     >
> >>>>>         <foreignkey field-ref="parentThingId"/>
> >>>>>     </reference-descriptor>
> >>>>>
> >>>>></class-descriptor>
> >>>>>
> >>>>>
> >>>>><class-descriptor
> >>>>>     class="Drawer"
> >>>>>     table="DRAWER">
> >>>>>
> >>>>>     <field-descriptor
> >>>>>         name="id"
> >>>>>         column="id"
> >>>>>         jdbc-type="INTEGER"
> >>>>>         primarykey="true"
> >>>>>         autoincrement="true"
> >>>>>         />
> >>>>>         <collection-descriptor
> >>>>>         name="stuffInDrawer"
> >>>>>         element-class-ref="Thing"
> >>>>>         >
> >>>>>         <inverse-foreignkey field-ref="drawerId"/>
> >>>>>     </collection-descriptor>
> >>>>></class-descriptor>
> >>>>>
> >>>>>
> >>>>>I have used the table per subclass hierarchy strategy.
> >>>>>I have used SequenceManagerHighLowImpl as the sequence manager. The ids 
> >>>>>(ID column) in the TOYS and BOOKS tables are unique when the Drawer 
> >>>>>object is stored. In the sense, when a Drawer containing 3 things (2 
> >>>>>books and 1 toy) is stored, the ids stored in THINGS table are 1, 2, and 
> >>>>>3, where as the ids stored in BOOKS table are 1 and 2 and id stored in 
> >>>>>the TOYS table is 3.
> >>>>>
> >>>>>I hope I have provided sufficient details to debug the issue. Could 
> >>>>>anyone please point me as to where am I going wrong or if there is any 
> >>>>>way to circumvent the problem ?
> >>>>>  Thanks and Regards,
> >>>>>Gautam.
> >>>>>
> >>>>>
> >>>>>
> >>>>---------------------------------------------------------------------
> >>>>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]
> >
>
>
>


 

Reply via email to