Hi Tino,
Have you an unique Id in class A? Try this example (I have followed the
OJB Tutorial ):
<class-descriptor class="ojb.test.A" table="T_AB"
isolation-level="read-uncommitted" accept-locks="true" refresh="true" >
<extent-class class-ref="ojb.test.B" />
<field-descriptor name="oid" column="oid" jdbc-type="INTEGER"
primarykey="true" autoincrement="true"/>
<field-descriptor name="attA" column="attA"
jdbc-type="VARCHAR"/>
<field-descriptor name="ojbConcreteClass" column="CLASS_NAME"
jdbc-type="VARCHAR"/>
</class-descriptor>
<class-descriptor class="ojb.test.B" table="T_AB"
isolation-level="read-uncommitted" accept-locks="true" refresh="true">
<field-descriptor name="oid" column="oid" jdbc-type="INTEGER"
primarykey="true" autoincrement="true"/>
<field-descriptor name="attA" column="attA"
jdbc-type="VARCHAR"/>
<field-descriptor name="ojbConcreteClass" column="CLASS_NAME"
jdbc-type="VARCHAR"/>
<field-descriptor name="attB" column="attB"
jdbc-type="VARCHAR"/>
</class-descriptor>
Below the ORACLE ddl ( modify database type for MySql):
create table T_AB (
oid INTEGER NOT NULL,
attA VARCHAR2 ( 48 ) NULL,
attB VARCHAR2 ( 48 ) NULL,
CLASS_NAME VARCHAR ( 48 ) NULL,
constraint PK_T_AB PRIMARY KEY (oid)
)
I hope that will help you,
Gildas
----- Original Message -----
From: "Tino Sch�llhorn" < <mailto:[EMAIL PROTECTED]>
[EMAIL PROTECTED]>
To: < <mailto:[EMAIL PROTECTED]> [EMAIL PROTECTED]>
Sent: Monday, June 14, 2004 8:46 AM
Subject: Inheritance: One Table
> Hi,
>
> I have I inheritance-problem. I want to map two classes to one table.
> They are defined as followed:
>
> class A {
> int id;
> protected String ojbConcreteClass;
> // some attributes
> }
>
> class B extends A {
> // some additional attributes
> }
>
>
> I created class-descriptors for each of the table:
>
> <class-descriptor class="A" table="table">
> // field-descriptors for A inluding ojbConcreteClass
> </class>
>
> and
>
>
> <class-descriptor class="B" table="table" extends="A">
> // additional field-descriptors for B
> </class>
>
>
> So: When I try to store an instance of Type A everything is fine. But
> when I try to store an instance of Type B OJB complains:
>
> Caused by:
> org.apache.ojb.broker.metadata.ClassNotPersistenceCapableException:
OJB
> needs at least one primary key attribute for class
> objectsRealClass=class kos.wnetz.om.RelationHistoryEvent,
> objectTopLevelClass=class kos.wnetz.om.RelationHistoryEvent
> at
org.apache.ojb.broker.Identity.checkForPrimaryKeys(Identity.java:245)
> at org.apache.ojb.broker.Identity.init(Identity.java:121)
>
>
> So I also tried to include the field-descriptors of the superclass in
> the class-descriptor for class B. But then I get an even worse error:
>
> Caused by: java.sql.SQLException: Parameter index out of range (8 >
7).
> at
>
com.mysql.jdbc.PreparedStatement.setInternal(PreparedStatement.java:1940
)
> at
com.mysql.jdbc.PreparedStatement.setString(PreparedStatement.java:1075)
> at
com.mysql.jdbc.PreparedStatement.setObject(PreparedStatement.java:766)
> at
com.mysql.jdbc.PreparedStatement.setObject(PreparedStatement.java:892)
> at
>
org.apache.ojb.broker.platforms.PlatformDefaultImpl.setObjectForStatemen
t(PlatformDefaultImpl.java:227)
> at
>
org.apache.ojb.broker.platforms.PlatformMySQLImpl.setObjectForStatement(
PlatformMySQLImpl.java:87)
> at
>
org.apache.ojb.broker.accesslayer.StatementManager.bindInsert(StatementM
anager.java:449)
> at
>
org.apache.ojb.broker.accesslayer.JdbcAccessImpl.executeInsert(JdbcAcces
sImpl.java:193)
> ... 47 more
>
> So obviously I am missing somthing. do you have any suggestions?
>
> Tino
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]>
[EMAIL PROTECTED]
> For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>
[EMAIL PROTECTED]