NamedNativeQuery в Hibernate генерирует много операторов выбора? Как получить ссылочные объекты в пакетном режиме?
Я думал, что понял стратегии извлечения hibernate, но, похоже, я ошибался.
Итак, у меня есть namedNativeQuery:
@NamedNativeQueries({
@NamedNativeQuery(
name = "getTest",
resultClass = ArticleOnDate.class,
query = "SELECT `a`.`id` AS `article_id`, `a`.`name` AS `name`, `b`.`price` AS `price` FROM article a LEFT JOIN price b ON (a.id = b.article_id) WHERE a.date <= :date"
)
})
@Entity()
@Immutable
public class ArtikelOnDate implements Serializable {
@Id
@OneToOne
@JoinColumn(name = "article_id")
private Article article;
...
}
Тогда я называю это:
Query query = session.getNamedQuery("getTest").setDate("date", date);
List<ArticleOnDate> list = (List<ArticleOnDate>) query.list();
Запрос возвращает тысячи объектов... Ну, хорошо, но после этого запроса Hibernate запрашивает тысячи других запросов:
Hibernate:
select
article0_.id as id1_0_0_,
article0_.bereich as name2_0_0_,
price1_.price as price1_14_1_
from
article artikel0_
where
artikel0_.id=?
Хорошо, это логика, потому что отношение @OneToOne выбирается охотно. Я не хочу получать его ленивым, поэтому я хочу стратегию пакетного извлечения.
Я попытался аннотировать свойство Article, но оно не сработало:
@Id
@OneToOne
@JoinColumn(name = "article_id")
@BatchSize(size=100)
private Article article;
Итак, что я могу сделать, чтобы получить отношения в пакете?