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]

Reply via email to