Hello, I have a problem with an inheritance hierarchy, mapped on multiple joined tables, where the primary key is _not_ auto-increment. The problem is: OJB always stores "0" as the value for the primary key field, although I defined another value.
-------- To make this easily reproducable, I created the tables from the OJB guide example: CREATE TABLE a ( id INT NOT NULL, some_value_from_a INT, PRIMARY KEY (id) )TYPE=InnoDB; CREATE TABLE b ( id INT NOT NULL, some_value_from_b INT, PRIMARY KEY (id), INDEX (id), CONSTRAINT fk_b_a FOREIGN KEY (id) REFERENCES a (id) )TYPE=InnoDB; -------- The classes A and B are defined as follows: public class A { private int id; private int someValueFromA; // getters and setters... } public class B extends A { private int id; // actually this field is not // necessary, it makes no difference // to the result if it is there or not private int someValueFromB; // getters and setters... } -------- repository_user.xml defines: <class-descriptor class="A" table="a" > <field-descriptor name="id" column="id" jdbc-type="INTEGER" primarykey="true" /> <field-descriptor name="someValueFromA" column="some_value_from_a" jdbc-type="INTEGER" /> </class-descriptor> <class-descriptor class="B" table="b" > <field-descriptor name="id" column="id" jdbc-type="INTEGER" primarykey="true" /> <field-descriptor name="someValueFromB" column="some_value_from_b" jdbc-type="INTEGER" /> <reference-descriptor name="super" class-ref="A" auto-retrieve="true" auto-update="true" auto-delete="true" > <foreignkey field-ref="id"/> </reference-descriptor> </class-descriptor> -------- All this is exactly as in the OJB reference guide - except that the primary key is _not_ auto-increment (if it _is_ auto-increment, everything works fine). I try to create an instance of B and store it: B b = new B(); b.setId(55); b.setSomeValueFromA(10); b.setSomeValueFromB(20); broker.store(b); After the first run, I check the database and I find out that both records, A and B, have been stored (which means that OJB has understood that A is a base class of B), but both records have an ID of 0 (zero): mysql> select * from a; +-----+-------------------+ | id | some_value_from_a | +-----+-------------------+ | 0 | 10 | +-----+-------------------+ 1 row in set (0.00 sec) mysql> select * from b; +-----+-------------------+ | id | some_value_from_b | +-----+-------------------+ | 0 | 20 | +-----+-------------------+ 1 row in set (0.00 sec) Consequently, when executing the code a second time, I get: "Duplicate entry '0' for key 1" This is what my database query log says about it: First run: SELECT id FROM accountingbase.b WHERE id = 55 INSERT INTO accountingbase.a (id,some_value_from_a) VALUES (0,10) INSERT INTO accountingbase.b (id,some_value_from_b) VALUES (0,20) Second run: SELECT id FROM accountingbase.b WHERE id = 55 INSERT INTO accountingbase.a (id,some_value_from_a) VALUES (0,10) ==> "Duplicate entry '0' for key 1" So, first it checks if no record with ID 55 exists. And then it tries to insert a record, but with the ID 0. So what has happened in between? How did my 55 become a 0? Is this a bug in OJB? Has anyone ever had the same problem? Can someone help me here? Thanks in advance and best regards, Sven P.S.: I am using OJB version 1.0.0 (final) --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]