Hello Mark,

I have also noticed that you don't map the relationship 
bi-directionally. Castor requires your A class to have a collection of 
Bs and your B class to have a collection of As. You must explicitly add 
the As to the Bs and vice-verse (this can be done in the addXXXXX() 
method within the persistent class to save you remembering in the client 
code).

i.e. in class A

addB(B b) {
    b.addA(this);
    this.bs.put(b); //or whatever, I am shooting from the hip here ;-)
}

You therefore also need to address this in the mapping.

<class name="b" identity="id">
 <map-to table="b_table" />
 <field name="id" />
<field name="as" type="a" collection="map">
   <sql name="aId" many-table="bridge_table" many-key="bId" />
 </field>
</class>

I hope this helps.

Patrick

Mark Woon wrote:

> Hmm...
>
> After playing with this some more, it looks like I need to get my B 
> objects within the current transaction for this to work.  Is there any 
> way around this?
>
>
> Thanks,
> -Mark
>
>
> Mark Woon wrote:
>
>> Hi all...
>>
>> I've encountered an interesting problem where Castor is under the 
>> impression that my many-to-many relationships are not persistable.  
>> I've an object A which has a collection of object B's.  The db schema 
>> is something like:
>>
>> A table
>> -------
>> id
>>
>>
>> B table
>> -------
>> id
>>
>> Bridge table
>> ------------
>> aId
>> bId
>>
>> <class name="a" type="a" identity="id">
>>  <map-to table="a_table" />
>>  <field name="id" />
>>  <field name="b" type="b" collection="map">
>>    <sql name="bId" many-table="bridge_table" many-key="aId" />
>>  </field>
>> </class>
>>
>> <class name="b" identity="id">
>>  <map-to table="b_table" />
>>  <field name="id" />
>> </class>
>>
>>
>> I've created a new A object, and added a few B objects into A's 
>> collection of B objects.  When I try calling db.create(a), the 
>> appropriate entry in a_table gets created, but nothing gets created 
>> in the bridge_table.  I can trace it all the way to 
>> ClassMolder.create(), where it checks to see if many-to-may 
>> relationships are persistable (by calling tx.isPersistent(oo)) and is 
>> told that they're NOT persistable. B implements TimeStampable, but 
>> I'm guessing that's not enough.  Does anyone have any ideas as to why 
>> this may be the case?  I just don't understand what Castor is doing 
>> at this point.
>
>
> ----------------------------------------------------------- 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

Reply via email to