The mapping goes like this:
<mapping>
...
<class name="Order" identity="id" key-generator="HIGH-LOW">
...
<field name="orderItems" type="OrderItem" collection="collection" lazy="true">
<sql many-key="orderid />
</field>
</class>
<class name="OrderItem" identity="id" key-generator="HIGH-LOW">
<field name="order" type="Order">
<sql name="orderid" />
</field>
</class><class name="OrderSubItem_1" extends="OrderItem" identity="id" key-generator="HIGH-LOW">
...
</class>
<class name="OrderSubItem_2" extends="OrderItem" identity="id" key-generator="HIGH-LOW">
...
</class>
...
</mapping>
In the database there would be four tables
ORDER (ID, ...), ORDERITEM (ID, ...), ORDERSUBITEM_1 (ID, ...), ORDERSUBITEM_2(ID, ...)
note that there must be a ID field also in the ORDERSUBITEM* tables. Castor writes the same ID in both the ORDERITEM table and the ORDERSUBITEM* table.
So that's how to map inheritance.
The problem with Castor ist that the collection in Order would contain only objects of class OrderItem!
Assume you have 2 rows in ORDERSUBITEM_1, and 3 in ORDERSUBITEM_2 that both reference the ORDER with ID 1
I guess You would expect that the collection orderItems in the Order with id=1 contains 2 instances of OrderSubItem_1 and 3 instances of OrderSubItem_2,
but using Castor it contains 5 instances of OrderItem! That's why I called it insufficient.
Please nore that this problem is the same when using the following OQL:
"select p from OrderItem p where p.order=$1", with the Order instance of id=1 as parameter.
You only can work around that problem by querying the sub-items explicitly: "select p from OrderSubItem_1 p where p.order = $1" "select p from OrderSubItem_2 p where p.order = $1" and putting the results in one collection on your own.
That's why I called it the bad news, because this work around will produce bugs in your app when anybody introduces a third sub-item.
BTW: Because of this and other insufficiencies we are evaluating Hibernate (www.hibernate.org) and Hibernate handles inheritance the right way. So it might be worth to deal with. Another reason is bug #986.
Hope this helps. Let me know if You need more information.
Regards, Michael
At 08:23 03.11.2003 -0200, you wrote:
Hi Michael !
Yes, this is my case ! Exactly as you described. Could you give me some information more on how to map it or how to try it in some way ?
What about the inheritance problems ?
Tks and regards, Michel.
-----Mensagem original----- De: michael simons [mailto:[EMAIL PROTECTED] Enviada em: sexta-feira, 31 de outubro de 2003 17:53 Para: [EMAIL PROTECTED] Assunto: Re: [castor-dev] Castor Mapping ...
At 08:40 31.10.2003 -0200, you wrote: >Hi all ! > >I have a kind of ecommerce and so it has an Order object. This object >could have lots of itens stored in a collection property. My problem is >that I can have different kinds of properties for my itens and so I cannot >know the type of each item until I process it. In Java programming it's >easy, but how can I map this using Castor ? Could you help me ? > >I have already read the documentation but I did not find any example or >something to help me ( maybe it was not so clear to my eyes ). > >Any help would be very appreciated. > >Tks, >Michel Bertrand.
Hi Michel,
I assume your model's somehow like this
class Order { private java.util.Collection orderItems; ... }
class OrderItem { private Order order; }
class OrderSubItem_1 extends OrderItem { ... }
class OrderSubItem_2 extends OrderItem { ... }
The good news is You can do this with Castor. The bad news is Castor's support of inheritance is insufficient.
Please let me know if You need more information.
Regards, Michael
----------------------------------------------------------- If you wish to unsubscribe from this mailing, send mail to [EMAIL PROTECTED] with a subject of: unsubscribe castor-dev
----------------------------------------------------------- If you wish to unsubscribe from this mailing, send mail to [EMAIL PROTECTED] with a subject of: unsubscribe castor-dev
----------------------------------------------------------- If you wish to unsubscribe from this mailing, send mail to
[EMAIL PROTECTED] with a subject of:
unsubscribe castor-dev
