В моем приложении Java я сохраняю все состояние своего приложения через JPA.Поэтому у меня есть корневой класс Data
, который содержит отношения к другим объектам данных, например Settings
или Metadata
:
@Entity
@Access(AccessType.FIELD)
public class Data {
@Id
@GeneratedValue
private long id;
@OneToOne(cascade = ALL)
public Settings settings;
@OneToOne(cascade = ALL)
public Metadata metadata;
// etc
}
. Для сохранения / загрузки состояния я просто сохраняю Data
корневой экземпляр в БД, который сохраняется и загружается из файла.Поэтому у меня всегда есть один экземпляр Data
с одним соответствующим экземпляром Settings
и т. Д.
В глубине моей модели данных у меня есть класс Result
, который выглядит примерно так:
@Entity
@Access(AccessType.FIELD)
public class Result {
@Id
@GeneratedValue
private long id;
public int value;
// etc
}
Теперь в этом классе Result
мне нужно получить доступ к загруженному в данный момент экземпляру Settings
.Но так как экземпляр Result
создан JPA, у меня нет ссылок ни на что, кроме доступных связанных с ними моделей данных.
Как лучше всего предоставить каждому Result
экземпляру доступ к этому Settings
экземпляру?
Мои идеи на данный момент:
1) Сохранить загруженный в данный момент Data
объект в статической переменной и доступ к экземпляру Settings
через него.Это плохо по понятным причинам.
2) Пусть каждый класс модели данных ссылается на соответствующего владельца, вплоть до корневого класса Data
.Однако это будет означать необходимость прохождения всей модели данных до корневого объекта, просто чтобы иметь доступ к его дочерним объектам.Кроме того, это будет означать дополнительное поле в каждом объекте.
3) Используйте Dependency Injection (Google Guice?), Чтобы каким-то образом внедрить правильный Settings
экземпляр, где это необходимо.Впрочем, я никогда раньше не использовал Dependency Injection, это хороший подход?
Возможно, мне нужно изменить весь мой подход?
Любые предложения и мнения приветствуются.