Мы используем аннотацию 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. Возможно ли это так?
Спасибо.