Hibernate 5 - использование NamedQuery без использования @FetchMode (SUBSELECT) - PullRequest
0 голосов
/ 28 июня 2018

Мы используем аннотацию Hibernate @NamedQuery для сущности и используем выборки соединений для быстрого извлечения данных, которые мы хотим получить во время запроса. У нас это работает по большей части, но FetchMode.SUBSELECT, что у нас есть в отношениях, похоже, не работает. Вместо этого создается впечатление, что сгенерированный запрос все еще выполняет один запрос с выборкой соединения, а не ожидаемый второй запрос.

Опять же, мы используем @NamedQuery Hibernate, а не стиль JPA.

Причина, по которой мы хотим использовать SUBSELECT для нашего случая, заключается в том, что у нас несколько @OneToMany отношений, и мы хотим избежать массовых проблем с продуктом Cartisean Product

Вот настройки, которые мы имеем:

@Entity
@NamedQueries(
        @NamedQuery(
                name = "StackOverflowNamedQuery",
                query = "SELECT distinct f FROM Foo f "
                        + "LEFT JOIN FETCH f.fooOneToMany bar " // This is a straight JOIN FETCH
                        + "LEFT JOIN FETCH bar.barOneToMany " //  WANT THIS TO DO A SUBSELECT
                        + "LEFT JOIN FETCH f.manyToOne_boo "
                        + "LEFT JOIN FETCH f.manyToOne_blah  "
                        + "WHERE f.id = :id "
                        + "f.isRemoved = false"
        )
)

Затем в Bar.getBarOneToMany (), вот настройки аннотации, которые мы имеем для этого отношения OneToMany

@OneToMany(fetch = FetchType.LAZY)
@JoinColumn(name = "entity_id", referencedColumnName = "id")
@Fetch(FetchMode.SUBSELECT)
public Set<BarOneToMany> getBarOneToMany() {
        return barOneToMany;
}

Итак, в основном, мы хотим получить одну из OneToMany с помощью выборки соединения, а затем мы хотим, чтобы другая была выполнена с помощью SUBSELECT. Возможно ли это так?

Спасибо.

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