Доступ к данным братьев и сестер из модели данных - PullRequest
0 голосов
/ 03 марта 2019

В моем приложении 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, это хороший подход?

Возможно, мне нужно изменить весь мой подход?

Любые предложения и мнения приветствуются.

1 Ответ

0 голосов
/ 03 марта 2019

Вариант 2 - обычный подход в JPA.С двунаправленным отображением вы пойдете вверх по иерархии.Добавление обратного поля для каждого класса не вызовет каких-либо изменений в модели БД или проблем с производительностью.

...