I have the following problem with m:n relations:

I have a bidirectional m:n relation, like the one in the tutorial, and when I try to store objects, the record in the intermediate table gets added twice, resulting in a duplicate key exception.

Here is my repository definition:

 <class-descriptor class="de.dmc.vms.Promotion" table="Promotion">
   <field-descriptor name="id" column="id" jdbc-type="INTEGER"
     primarykey="true" autoincrement="true"/>

<collection-descriptor name="clients" element-class-ref="de.dmc.vms.Client"
collection-class="java.util.ArrayList" indirection-table="Promotion_Client"
auto-retrieve="true" auto-update="true" auto-delete="true" >
<fk-pointing-to-this-class column="promotionId"/>
<fk-pointing-to-element-class column="clientId"/>
</collection-descriptor>


</class-descriptor>


<class-descriptor class="de.dmc.vms.Client" table="Client"> <field-descriptor name="id" column="id" jdbc-type="INTEGER" primarykey="true" autoincrement="true"/>

<collection-descriptor name="promotions" element-class-ref="de.dmc.vms.Promotion"
collection-class="java.util.ArrayList" indirection-table="Promotion_Client"
auto-retrieve="true" auto-update="true" auto-delete="true" >
<fk-pointing-to-this-class column="clientId"/>
<fk-pointing-to-element-class column="promotionId"/>
</collection-descriptor>
</class-descriptor>



The three tables are defined pretty straightforward. Here is the code to add new objects:


// Build some example objects.
Promotion promo1 = new Promotion("promo1");
Promotion promo2 = new Promotion("promo2");
Client client1 = new Client("client1");
Client client2 = new Client("client2");
// Connect the objects.
promo1.addClient(client1);
promo2.addClient(client1);
promo2.addClient(client2);
// Store the objects.
broker.beginTransaction();
broker.store(promo1);
broker.store(promo2);
broker.commitTransaction();


At this point I get a duplicate key exception, and tracing the SQL statements with P6Spy I see that the same INSERT INTO promotion_client occurs twice, with the columns switched:

INSERT INTO Promotion_Client (clientId,promotionId) VALUES ('222','442')
INSERT INTO Promotion_Client (promotionId,clientId) VALUES ('442','222')

What did I do wrong?

Thanks for your help.

Greetings
Lars Soltau



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



Reply via email to