I have two classes that share a superclass since they
have the same storage. Unfortunately, since
com.triactive.jdo.model.FieldMetaData uses the
Class.getDeclaredField() method instead of Class.getField
(), it is not finding the field I declared in the superclass.
I have this structure for the classes
class TrainingProgram
private HashSet trainingProgramItems
private HashSet workoutResults
abstract class ProgramItem
private TrainingProgram trainingProgram
class TrainingProgram extends ProgramItem
class WorkoutResult extends ProgramItem
Here is the metadata:
<jdo>
<package name="persistent">
<class name="TrainingProgram">
<field name="trainingProgramItems">
<collection element-type="TrainingProgramItem">
<extension vendor-name="triactive"
key="owner-field" value="trainingProgram"/>
</collection>
</field>
<field name="workoutResults">
<collection element-type="WorkoutResult">
<extension vendor-name="triactive"
key="owner-field" value="trainingProgram"/>
</collection>
</field>
</class>
</package>
</jdo>
<jdo>
<package name="persistent">
<class name="ProgramItem">
</class>
</package>
</jdo>
<jdo>
<package name="persistent">
<class name="TrainingProgramItem" persistence-
capable-superclass="ProgramItem">
<field name="trainingProgram" null-
value="exception">
<extension vendor-name="triactive"
key="collection-field" value="trainingProgramItems"/>
</field>
</class>
</package>
</jdo>
<jdo>
<package name="persistent">
<class name="WorkoutResult" persistence-capable-
superclass="ProgramItem">
<field name="trainingProgram" null-
value="exception">
<extension vendor-name="triactive"
key="collection-field" value="workoutResults"/>
</field>
</class>
</package>
</jdo>
I had to declare the collection-field elements in the
subclass metadata since they reference the same
object, but from different collections.