Problem with multiple composite keys

Srilakshmi Machineni <[email protected]>
Newsgroups gmane.comp.jakarta.ojb.user
Message-ID <[email protected]>
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/
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.