@ManyToOne
, связанный с @BatchSize
, может иметь смысл, только если соответствующее поле помечено как lazy
(lazy=true
).
В самом деле, если поле не lazy
, оно по определению уже загружено, так как включающая сущность загружена, поэтому проблема вызовов базы данных не применяется.
Представьте себе класс Person
, у которого есть коллекция из элементов ShoesPair
(ShoesPair
.class), и в этом классе присутствует поле owner
, помеченное как ленивое (поскольку оно является необязательным и не содержит важной информации при получении конкретной пары обуви).
Требуется перебрать 25 пар обуви (25 ShoesPair
объектов), чтобы найти их владельца.
Если поле owner
(соответствующее одному человеку) снабжено только аннотацией @ManyToOne
, будет выбрано 25 для базы данных.
Однако, если помечено @BatchSize(size=5)
, будет всего 5 вызовов, что повысит производительность.
Из документации по Hibernate, уточняется, что размер пакета применяется не только к коллекциям:
Вы можете также включить пакетную загрузку коллекций.
Hibenate особо упоминает @OneToMany
случаев, потому что они применяются с полями, которые в 90% случаев помечены как lazy
.
person
Mik378
schedule
24.10.2012