Menu

#8 Use Class.getField() instead of Class.getDeclaredField()

open
nobody
None
5
2004-11-01
2004-11-01
No

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.

Discussion


Log in to post a comment.

MongoDB Logo MongoDB