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]
