私は、外部クラスの複雑なプロパティを表現するために埋め込み可能な内部クラスを使用しようとしています。これを保存すると、eclipselinkによって生成されたデータベーススキーマ内の内部クラスからの情報はありません。JPAで複雑な状態を表すためにネストされたクラスを埋め込む
私がしようとしていることは良い考えのようですか? eclipselinkが@Basic
の属性をgetRate()
に認識しているように見えるのはなぜですか?Attributes
?
その他の情報:Measure
は、Person
のコンストラクタに提供されているファクトリを使用してインスタンス化する必要があります。したがって、私はこれをどのように使用できるようになるか分かりません。 Person
の状態を単純な言葉で(ダブルスのように、Measures
ではなく)保存する別のクラスを作る必要があるように思えますが、それを使って実際のPerson
型オブジェクトを作成しますが、それは非常に悲しい私の残りのアプリケーションには意味があります。
@Entity
public static class Person {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private int id;
@Transient
public Measure<Double, CleanupRate> rate;
@Embedded
private Attributes attributes;
@Embeddable
public static class Attributes {
@Transient
private Person person;
public Attributes() {
}
public Attributes(Person person) {
this.person = person;
}
@Basic
public double getRate() {
return person.rate.getInternalValue();
}
public void setRate(double value) {
person.rate.setInternalValue(value);
}
}
public Person() {
rate = udm.getMeasureFactory().createMeasure(0.0, CleanupRate.class);
attributes = new Attributes(this);
}
public void setRate(double rate) {
this.rate.setValue(rate);
}
}
編集:
それらはストレージから取得されたときに、私のオブジェクトに対策依存性を注入するために、私は、依存関係を注入し、私のDAOでそれを使用するインタフェースを追加しました。 DAOを注入できるので、依存関係を検索されたオブジェクトに伝播できます。私はblogからアイデアを得ました。
private <T extends UomInjectable> List<T> //
getListOfUomInjectableType(final Class<T> klass) {
List<T> result = getListOfType(klass);
for (UomInjectable injectable : result) {
injectable.injectUomFactory(udm);
}
return result;
}
はい、これは、ユニットテストの内部だけでテストコード(人が静的である理由です)です。 – Dave
私は、属性オブジェクトから値を読み取る 'Person'の中で' @ PostLoad'メソッドを使うことで、属性の中の 'Person'への参照を回避することができました。私がシングルトンに頼らずに 'Measure'オブジェクトをどのようにインスタンス化するのかについてはまだ考えています。 – Dave