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] >