複数のクラスのいくつかのプロパティを参照するために、小さなメタモデルをセットアップしようとしています。
例Person.name
: 以下のクラスを使用して、 と のみを格納Person.surname
したいMetaManager.config
。name
問題は、との値を保存したくないのですがsurname
、フィールドへの参照です。これらのフィールドの参照を保存することで、後で渡される任意のインスタンスのname
andを取得できます。surname
Person
MetaManager.getValues()
このコードはMetamodel APIに似ていますが、これを使用する必要があるかどうかはわかりません (Metamodel は の一部でpersistence
あり、これは とは関係がないためpersistence
)。この API ではPerson_.name
、オブジェクトを使用してこのように参照を行いEntityType
ます。
問題は、後でインスタンスからこれらのプロパティの値を取得できるように、これらのプロパティへの参照をどのように保存できるかということです。
以下のコードは、私が達成しようとしていることのスケッチを示しています。ご覧のとおり、私の問題は in Person.getValue()
and a toString()
on this reference です (したがって、 on の参照ssn
は を返し"ssn"
ます)。
interface IMetable {
Object getValue(Meta meta);
}
class Person implements IMetable {
String ssn;
String name;
String surname;
Person(String ssn, String name, String surname) {
this.ssn = ssn;
this.name = name;
this.surname = surname;
}
@Override
Object getValue(ClassMeta meta) {
// Return the value of the (by meta) referenced field
return null;
}
}
class MetaManager {
Map<Class, Meta[]> config;
public Map<String, String> getValues(IMetable object) {
if(config.containsKey(object.class)) {
ClassMeta[] metamodel = config.get(object.class);
Map<String, String> values = new HashMap();
for(Meta meta : metamodel) {
values.put(meta.toString(), object.getValue(meta).toString());
}
return values;
}
else {
throw new Exception("This class has not been configurated.");
}
}
}