Hi all,

I'm new to OJB but am very impressed with it so far. Despite my traversal of the documentation, I have run into a problem which searching of the mailing list archives hasn't really shed light on.

I have five classes, as described below
 - AbstractEntity is the root abstract class
 - AbstractPerson extends AbstractEntity, and is also abstract
 - Group extends AbstractEntity, and is concrete
 - Student and StaffMember extend AbstractPerson and are concrete.

I'd like the tables to be organised so that Group and Student are mapped onto one table, and Group is on another table. So following all the tutorials and docs I could find, this is what I did (extra fields ommitted):

Table: AbstractEntity   Fields: id, ...
Table: AbstractPerson   Fields: id, class_name, ...
Table: Group    Fields: id, ...

Each class has an id attribute, and AbstractPerson, Student, and StaffMember have an ojbConcreteClass attribute too.

My repository looks like this (again, extra fields ommitted):

<!-- nz.ac.auckland.markit.core.AbstractEntity -->
<class-descriptor class="nz.ac.auckland.markit.core.AbstractEntity" table="AbstractEntity">
<extent-class class-ref="nz.ac.auckland.markit.core.Group" />
<extent-class class-ref="nz.ac.auckland.markit.core.AbstractPerson" />
<extent-class class-ref="nz.ac.auckland.markit.core.Student" />
<extent-class class-ref="nz.ac.auckland.markit.core.StaffMember" />


<field-descriptor name="id" column="id" jdbc-type="INTEGER" primarykey="true" autoincrement="true"/>
<field-descriptor name="name" column="name" jdbc-type="VARCHAR"/>
</class-descriptor>


<!-- nz.ac.auckland.markit.core.Group -->
<class-descriptor class="nz.ac.auckland.markit.core.Group" table="PaperGroup">
<reference-descriptor name="super" class-ref="nz.ac.auckland.markit.core.AbstractEntity">
<foreignkey field-ref="id"/>
</reference-descriptor>


<field-descriptor name="id" column="id" jdbc-type="INTEGER" primarykey="true" autoincrement="true"/>
</class-descriptor>


<!-- nz.ac.auckland.markit.core.AbstractPerson -->
<class-descriptor class="nz.ac.auckland.markit.core.AbstractPerson" table="AbstractPerson">
<extent-class class-ref="nz.ac.auckland.markit.core.Student" />
<extent-class class-ref="nz.ac.auckland.markit.core.StaffMember" />


<reference-descriptor name="super" class-ref="nz.ac.auckland.markit.core.AbstractEntity">
<foreignkey field-ref="id"/>
</reference-descriptor>


<field-descriptor name="id" column="id" jdbc-type="INTEGER" primarykey="true" autoincrement="true"/>
<field-descriptor name="ojbConcreteClass" column="class_name" jdbc-type="VARCHAR"/>
</class-descriptor>


<!-- nz.ac.auckland.markit.core.Student -->
<class-descriptor class="nz.ac.auckland.markit.core.Student" table="AbstractPerson">
<field-descriptor name="id" column="id" jdbc-type="INTEGER" primarykey="true" autoincrement="true"/>
<field-descriptor name="ojbConcreteClass" column="class_name" jdbc-type="VARCHAR"/>
</class-descriptor>



Ok, nearly done.


Adding Students and Staffmembers succeeds, except the person isn't added to the AbstractEntity table, only to the AbstractPerson table. I tried adding the <reference-descriptor name="super"> to point to AbstractEntity but it spewed saying AsbtractEntity wasn't a superclass of Student.

It almost seems like OJB doesn't look more than 1 level up an inheritance hierarchy - is this the case? what could I do about it?

Adding Groups throws an Exception - details are at the end.

Any help would be greatly appreciated. When I figure it all out I will write some docs up for it :)

Thanks,

Robert Coup


java.lang.InstantiationException
at sun.reflect.InstantiationExceptionConstructorAccessorImpl.newInstance(InstantiationExceptionConstructorAccessorImpl.java:30)
at java.lang.reflect.Constructor.newInstance(Constructor.java:274)
at java.lang.Class.newInstance0(Class.java:306)
at java.lang.Class.newInstance(Class.java:259)
at org.apache.ojb.broker.metadata.fieldaccess.AnonymousPersistentFieldForInheritance.get(Unknown Source)
at org.apache.ojb.broker.core.PersistenceBrokerImpl.assignReferenceFKs(Unknown Source)
at org.apache.ojb.broker.core.PersistenceBrokerImpl.storeToDb(Unknown Source)
at org.apache.ojb.broker.core.PersistenceBrokerImpl.store(Unknown Source)
at org.apache.ojb.broker.core.PersistenceBrokerImpl.store(Unknown Source)
at org.apache.ojb.broker.core.DelegatingPersistenceBroker.store(Unknown Source)
at org.apache.ojb.broker.core.DelegatingPersistenceBroker.store(Unknown Source)
at dbtest.UCCreateNewGroup.apply(UCCreateNewGroup.java:32)
at dbtest.MarkitDB.run(MarkitDB.java:98)
at dbtest.MarkitDB.main(MarkitDB.java:66)
rethrown as org.apache.ojb.broker.metadata.MetadataException
at org.apache.ojb.broker.metadata.fieldaccess.AnonymousPersistentFieldForInheritance.get(Unknown Source)
at org.apache.ojb.broker.core.PersistenceBrokerImpl.assignReferenceFKs(Unknown Source)
at org.apache.ojb.broker.core.PersistenceBrokerImpl.storeToDb(Unknown Source)
at org.apache.ojb.broker.core.PersistenceBrokerImpl.store(Unknown Source)
at org.apache.ojb.broker.core.PersistenceBrokerImpl.store(Unknown Source)
at org.apache.ojb.broker.core.DelegatingPersistenceBroker.store(Unknown Source)
at org.apache.ojb.broker.core.DelegatingPersistenceBroker.store(Unknown Source)
at dbtest.UCCreateNewGroup.apply(UCCreateNewGroup.java:32)
at dbtest.MarkitDB.run(MarkitDB.java:98)
at dbtest.MarkitDB.main(MarkitDB.java:66)
Caused by: java.lang.InstantiationException
at sun.reflect.InstantiationExceptionConstructorAccessorImpl.newInstance(InstantiationExceptionConstructorAccessorImpl.java:30)
at java.lang.reflect.Constructor.newInstance(Constructor.java:274)
at java.lang.Class.newInstance0(Class.java:306)
at java.lang.Class.newInstance(Class.java:259)
... 10 more






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



Reply via email to