JPA-Hibernate один к одному - действительно ли ленивая загрузка действительно работает в этом случае? - PullRequest
0 голосов
/ 26 ноября 2018

Я наблюдал следующее в случае с ассоциацией JPA-HIbernate один к одному:

Когда связь один к одному с использованием Lazy fetch - запускаются запросы SELECT

class A {
    @OneToOne(fetch = FetchType.LAZY, mappedBy = "a", cascade = { CascadeType.PERSIST, CascadeType.MERGE })
    public B getB() {
        return B;
    }
}

Когда одинк одной ассоциации с использованием EAGER fetch - она ​​запускает JOIN-запросы

class A {
    @OneToOne(fetch = FetchType.EAGER, mappedBy = "a", cascade = { CascadeType.PERSIST, CascadeType.MERGE })
    public B getB() {
        return B;
    }
}

Что я наблюдал, так это в случае 1, также нет ничего ленивого, но запросы SELECT запускаются почти сразу, когда загружается родительский объект.

Действительно ли ленивая загрузка действительно работает в случае конфигурации по умолчанию в JPA-Hibernate или всегда EAGER с запросами SELECT / JOIN?

1 Ответ

0 голосов
/ 05 декабря 2018

Итак, я обнаружил поведение по умолчанию JPA для сущностей один-на-один.Они всегда готовы, даже когда тип извлечения LAZY.Для него не создан прокси-сервер, и сопоставления один-к-одному разрешаются вместе с родительской выборкой.

Как подсказывает другой поток , инструментарий байт-кода является правильным способом достижения ленивого разрешения.

...