Hi Armin, The value for "abc" is not the same for both parent references. In fact thats how we differentiate the data. If one always overrides the other, does that mean we have to change the database structure? Or is there any other work around?
Thanks Sri. ----- Original Message ---- From: Armin Waibel <[EMAIL PROTECTED]> To: OJB Users List <ojb-user@db.apache.org> Sent: Wednesday, February 14, 2007 3:28:54 PM Subject: Re: Problem with multiple composite keys Hi Srilakshmi, Srilakshmi Machineni wrote: > Armin, Thanks for your response. I am not sure if this is a problem > with the bidirectional reference. We have these references throughout > the application. We store the child in two steps but its the same > error. As of now we first store the child table without references > and then store the parent table and then the reference to the parent > table in the child table. Could sharing of the composite keys be a > problem? Oh, now I got it. You are right, the problem is the shared FK 'abc' - one will always override the other. Has 'abc' always the same value for both parent references? regards, Armin > > Thanks Sri. > > ----- Original Message ---- From: Armin Waibel <[EMAIL PROTECTED]> > To: OJB Users List <ojb-user@db.apache.org> Sent: Wednesday, February > 14, 2007 11:40:04 AM Subject: Re: Problem with multiple composite > keys > > > Hi, > > could this problem be caused by the bidirectional references? How do > you store the child object? If you store the object in two steps does > this prevent the error: > > broker.beginTransaction(); // store child without references > broker.store(child); // now set the references child.setParent(p1) > p1.setChild(c); ... // update child broker.store(child); > broker.commitTransaction(); > > regards, Armin > > Srilakshmi Machineni wrote: >> Hello, We are currently using OJB 1.0.1 . We have a table that is a >> child to two different tables. These two parent tables have >> composite primary keys and they share part of the keys in the child >> table. The child has a 1:1 relation to both the parents. >> >> The tables look something like this: >> >> CREATE TABLE "CHILD" ( "CHILD_ID" INTEGER NOT NULL PRIMARY KEY, >> "PARENT_ID" INTEGER , "ABC" INTEGER , "PARENT2_ID" INTEGER ) ALTER >> TABLE "CHILD" ADD CONSTRAINT "PARENT2_FK" FOREIGN KEY >> ("PARENT2_ID", "ABC") REFERENCES "PARENT2" ("PARENT_ID", "ABC") >> ALTER TABLE "CHILD" ADD CONSTRAINT "PARENT1_FK" FOREIGN KEY >> ("PARENT_ID", "ABC") REFERENCES "PARENT" ("PARENT_ID", "ABC") >> >> CREATE TABLE "PARENT" ( "PARENT_ID" INTEGER NOT NULL, "ABC" INTEGER >> NOT NULL) ALTER TABLE "PARENT" ADD CONSTRAINT "PK1" PRIMARY KEY >> ("PARENT_ID", "ABC"); >> >> >> CREATE TABLE "PARENT2" ( "PARENT2_ID" INTEGER NOT NULL, "ABC" >> INTEGER NOT NULL) ALTER TABLE "PARENT2" ADD CONSTRAINT "PK1" >> PRIMARY KEY ("PARENT2_ID", "ABC"); >> >> The OJB Classes:: class Child{ private Integer childId; private >> Integer parentId; private Integer abc; private Integer parent2Id; >> //rel private Parent parent; private Parent2 parent2; } >> >> class Parent{ private Integer parentId; private Integer abc; //rel >> private Child child; } >> >> class Parent2{ private Integer parent2Id; private Integer abc; >> //rel private Child child; } >> >> The repository mapping: >> >> <class-descriptor class="Child" table="CHILD"> <field-descriptor >> name="childId" column="CHILD_ID" primarykey="true" >> jdbc-type="INTEGER"/> <field-descriptor name="parentId" >> column="PARENT_ID" jdbc-type="INTEGER"/> <field-descriptor >> name="abc" column="ABC" jdbc-type="INTEGER"/> <field-descriptor >> name="parent2Id" column="PARENT2_ID" jdbc-type="INTEGER"/> >> <reference-descriptor name="parent" class-ref="Parent"> <foreignkey >> field-ref="parentId" /> <foreignkey field-ref="abc" /> >> </reference-descriptor> <reference-descriptor name="parent2" >> class-ref="Parent2"> <foreignkey field-ref="parent2Id" /> >> <foreignkey field-ref="abc" /> </reference-descriptor> >> </class-descriptor> >> >> <class-descriptor class="Parent" table="PARENT"> <field-descriptor >> name="parentId" column="PARENT_ID" primarykey="true" >> jdbc-type="INTEGER"/> <field-descriptor name="abc" column="ABC" >> primarykey="true" jdbc-type="INTEGER"/> <reference-descriptor >> name="child" class-ref="Child"> <foreignkey field-ref="parentId" /> >> <foreignkey field-ref="abc" /> </reference-descriptor> >> </class-descriptor> >> >> <class-descriptor class="parent2" table="PARENT"> <field-descriptor >> name="parent2Id" column="PARENT2_ID" primarykey="true" >> jdbc-type="INTEGER"/> <field-descriptor name="abc" column="ABC" >> primarykey="true" jdbc-type="INTEGER"/> <reference-descriptor >> name="child" class-ref="child"> <foreignkey field-ref="parent2Id" >> /> <foreignkey field-ref="abc" /> </reference-descriptor> >> >> </class-descriptor> >> >> When storing the child table, it is possible that data from only >> one of the parent tables is populated. When I am trying to store in >> that database, I dont have a problem when I call the set method on >> one of the parent objects of the child but when I try to refer the >> second parent in the same manner, I am getting a sql exception that >> says that data does not exist in the parent table and the >> transaction is being rolled back(The parent object is stored in the >> database first...). I have tried removing the OJB relation and >> manually setting the foreign key fields for the second parent. In >> this case I am able to store the part of the key that is not shared >> but the shared part is being set to null in the database. I have >> also tried to make one of them a collection-descriptor. I got the >> same sql exception. I am not sure if there is a problem with how >> the database is setup or how my OJB mappings are and classes are >> setup. At this point, short of making a database change, I feel I >> have exhausted all available option. Am I missing something? Any >> advice would be appreciated.. >> >> Thanks, -Sri. >> >> >> >> ____________________________________________________________________________________ >> TV dinner still cooling? Check out "Tonight's Picks" on Yahoo! TV. >> http://tv.yahoo.com/ >> >> --------------------------------------------------------------------- >> To unsubscribe, e-mail: [EMAIL PROTECTED] For >> additional commands, e-mail: [EMAIL PROTECTED] >> >> > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: [EMAIL PROTECTED] For > additional commands, e-mail: [EMAIL PROTECTED] > > > > ____________________________________________________________________________________ > Do you Yahoo!? Everyone is raving about the all-new Yahoo! Mail > beta. http://new.mail.yahoo.com > > --------------------------------------------------------------------- > To unsubscribe, e-mail: [EMAIL PROTECTED] For > additional commands, e-mail: [EMAIL PROTECTED] > > --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] ____________________________________________________________________________________ Do you Yahoo!? Everyone is raving about the all-new Yahoo! Mail beta. http://new.mail.yahoo.com --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]