Спящий ленивый OneToOne с радостью забирает все - PullRequest
0 голосов
/ 01 октября 2018

У меня есть объект, который объединяет множество данных из разных таблиц.Связи являются OneToOne и все необязательны - только одно поле не является обязательным (и является ManyToOne).

OneToOne с lazy проблематично, поэтому я настроил средство улучшения байт-кода гибернации во время сборки.Вот сущности:

@Entity
public class LinkEntity  {

    @OneToOne(fetch = FetchType.LAZY, mappedBy = "link", cascade = CascadeType.PERSIST)
    @LazyToOne(LazyToOneOption.NO_PROXY)
    private FirstOptionalEntity first;

    @OneToOne(fetch = FetchType.LAZY, mappedBy = "link", cascade = CascadeType.PERSIST)
    @LazyToOne(LazyToOneOption.NO_PROXY)
    private SecondOptionalEntity second;    

    @OneToOne(fetch = FetchType.LAZY, mappedBy = "link", cascade = CascadeType.PERSIST)
    @LazyToOne(LazyToOneOption.NO_PROXY)
    private ThirdOptionalEntity third;

    @ManyToOne(fetch = FetchType.EAGER, optional = false, cascade = CascadeType.PERSIST)
    @JoinColumn(name = "NEEDED_ID")
    private NeededEntity needed;
}

@Entity
public class FirstOptionalEntity { // Second and Third looks the same
    @OneToOne(fetch = FetchType.LAZY, optional = false)
    @JoinColumn(name = "LINK_ID")
    private LinkEntity link;
}

Теперь у меня есть следующая проблема: я хочу загрузить все LinkEntity и затем вызвать FirstEntity only .Но всякий раз, когда я вызываю какой-либо получатель ассоциаций OneToOne, каждое отношение OneToOne загружается сразу.

Это нормально или я что-то не так?

findAll(LinkEntity)

Строки журнала SQL о LinkEntity и NeededEntity -> хорошая

linkElement.getFirst()

строка журнала SQL от первого -> хорошая

строка журнала SQL от второго -> не очень хорошая

строка журнала SQL от третьего -> не такnice

В этом случае это проблематично, потому что я хочу загрузить много LinkEntities с одним OptionalEntity, соединенным слева, чтобы уменьшить количество запросов к базе данных.

Но теперь у меня есть оператор выбора ссылки, а после этого 3 * n операторов для необязательных объектов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...