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]