Re: Inheritance: One Table

2004-06-14 Thread LE-QUERE Gildas - REN
Hi Tino,
 
Have you an unique Id in class A? Try this example (I have followed the
OJB Tutorial ):
 
 
 
   
 
 
  
 
 
 
  
 
 
 
 
 
 
 
 
 

 
 
 
 
Below the ORACLE ddl ( modify database type for MySql):
 
create table T_AB ( 
  oidINTEGER   NOT NULL,
  attAVARCHAR2 ( 48 )  NULL,
  attBVARCHAR2 ( 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:
> 
> 
> // field-descriptors for A inluding ojbConcreteClass
> 
> 
> and
> 
> 
> 
> // additional field-descriptors for B
> 
> 
> 
> 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]


Re: Inheritance: One Table

2004-06-14 Thread Thomas Dudziak
Tino Schöllhorn wrote:
Hi,
unfortunately I still have one problem:
I use a xml-parser to pre-validate the repository.xml-file. This 
Parser now complains that field-descriptors cannot be used when using 
extent. I checked that with the DTD and I think it is correct:


But the thing is: OJB works correctly. So what do I do now? Should I 
ignore this warning? Or do I have to create a not-persistent abstract
superclass?
I think, your XML parser is in error here (it probably matches the first 
branch as soon as it sees the extent-class) because extent-class + 
field-descriptor is definitely allowed (second branch). If I'm not 
mistaken, OJB also uses the XML parser with validation turned on, so you 
should not have to validate the repository.xml file, anyway.

Tom
-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]


Re: Inheritance: One Table

2004-06-14 Thread Tino Schöllhorn
Hi,
unfortunately I still have one problem:
I use a xml-parser to pre-validate the repository.xml-file. This Parser 
now complains that field-descriptors cannot be used when using extent. I 
checked that with the DTD and I think it is correct:


But the thing is: OJB works correctly. So what do I do now? Should I 
ignore this warning? Or do I have to create a not-persistent abstract
superclass?

Tino

Thomas Dudziak wrote:
Tino Schöllhorn wrote:
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:

// field-descriptors for A inluding ojbConcreteClass

and

// additional field-descriptors for B

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).

I don't know where this exception comes from, but in order to describe a 
super-subtype relationship you should use something like:



// field-descriptors for A inluding ojbConcreteClass

and

// field-descriptors for B including ojbConcreteClass

The extent-class is inverse to the extends/implements in Java (i.e. 
specified at the supertype), and also note that the class-descriptor for 
B contains all attributes of A (there is no automatic 'inheritance' of 
the descriptors in the repository.xml file) including the 
ojbConcreteClass attribute.

Tom

-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]


Re: Inheritance: One Table

2004-06-14 Thread Thomas Dudziak
Tino Schöllhorn wrote:
thanks now it works. But why do I have to map the attributes of the 
superclass in the subclass again? Is this intended or is the 
inheritance of descriptors a not yet enhancement?
Yes, this is by intention because you don't necessarily want to have all 
persistent fields of the superclass in the subclass. For the 1.1 we 
might make this a bit more comfortable by adding a flag to the class 
descriptor that defines whether the the features shall be inherited 
(with auto inheritance the default).

Tom
-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]


Re: Inheritance: One Table

2004-06-14 Thread Tino Schöllhorn
Hi,
thanks now it works. But why do I have to map the attributes of the 
superclass in the subclass again? Is this intended or is the inheritance 
of descriptors a not yet enhancement?

Regards
Tino
Thomas Dudziak wrote:
Tino Schöllhorn wrote:
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:

// field-descriptors for A inluding ojbConcreteClass

and

// additional field-descriptors for B

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).

I don't know where this exception comes from, but in order to describe a 
super-subtype relationship you should use something like:



// field-descriptors for A inluding ojbConcreteClass

and

// field-descriptors for B including ojbConcreteClass

The extent-class is inverse to the extends/implements in Java (i.e. 
specified at the supertype), and also note that the class-descriptor for 
B contains all attributes of A (there is no automatic 'inheritance' of 
the descriptors in the repository.xml file) including the 
ojbConcreteClass attribute.

Tom

-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]


Re: Inheritance: One Table

2004-06-14 Thread Thomas Dudziak
Tino Schöllhorn wrote:
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:

// field-descriptors for A inluding ojbConcreteClass

and

// additional field-descriptors for B

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).
I don't know where this exception comes from, but in order to describe a 
super-subtype relationship you should use something like:



// field-descriptors for A inluding ojbConcreteClass

and

// field-descriptors for B including ojbConcreteClass

The extent-class is inverse to the extends/implements in Java (i.e. 
specified at the supertype), and also note that the class-descriptor for 
B contains all attributes of A (there is no automatic 'inheritance' of 
the descriptors in the repository.xml file) including the 
ojbConcreteClass attribute.

Tom
-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]


Inheritance: One Table

2004-06-13 Thread Tino Schöllhorn
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:

// field-descriptors for A inluding ojbConcreteClass

and

// additional field-descriptors for B

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.setObjectForStatement(PlatformDefaultImpl.java:227)
	at 
org.apache.ojb.broker.platforms.PlatformMySQLImpl.setObjectForStatement(PlatformMySQLImpl.java:87)
	at 
org.apache.ojb.broker.accesslayer.StatementManager.bindInsert(StatementManager.java:449)
	at 
org.apache.ojb.broker.accesslayer.JdbcAccessImpl.executeInsert(JdbcAccessImpl.java:193)
	... 47 more

So obviously I am missing somthing. do you have any suggestions?
Tino
-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]