Я пытаюсь использовать внутренний класс как встраиваемый для представления некоторых сложных свойств внешнего класса. Когда я сохраняю это, отсутствует информация из внутреннего класса в схеме базы данных, сгенерированной eclipselink.
То, что я пытаюсь сделать, кажется хорошей идеей? Почему eclipselink, похоже, не распознает их @Basic
атрибут getRate()
in Attributes
?
Некоторая другая информация: Measure
должен быть создан с использованием фабрики, которая предоставляется конструктору Person
, поэтому я даже не знаю, как я вообще смогу использовать это. Кажется все более и более вероятным, что мне придется создать отдельный класс просто для хранения состояния Person
в простых терминах (например, double, а не 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);
}
}
Edit:
Чтобы добавить зависимость меры в мои объекты, когда они извлекаются из хранилища, я добавил интерфейс, который вводит зависимость, и использовал его в моем DAO. Так как DAO может быть введен, я могу распространить зависимость вниз на извлеченные объекты. Я получил идею из блога .
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;
}