Могут ли все двунаправленные отношения быть ленивыми? - PullRequest
0 голосов
/ 07 ноября 2018

Я использую Spring с JPA (Hibernate).

Поскольку я узнавал на многих сайтах об отношениях (есть несколько способов реализации каждого из них), также был разговор о выборке типов, но на вопрос, который я здесь задавал, ответа так и не было.

Я хотел бы знать, есть ли случаи, когда двунаправленное отношение не может быть ленивым? Может ли однонаправленный тоже не быть ленивым иногда?

К примеру: Предположим, что в одном Warehouse много Box. Учитывая, что это отношение ManyToOne (как уже было сказано, несколько способов его реализации, для примера скажем, Warehouse является владельцем) - может ли оно быть ленивым на обоих концах (вы можете загрузить Box и лениво Warehouse , но загрузка Warehouse не загрузит все Box es, которые у него есть, только когда вы действительно их получите)?

Как бы выглядел такой фрагмент - я просто аннотирую оба конца с помощью LAZY в JPA или какой-то другой, возможно, специфичной для Hibernate?

1 Ответ

0 голосов
/ 07 ноября 2018

Все отношения могут быть ленивыми, и из документов Hibernate рекомендуется пометить все как ленивые: http://docs.jboss.org/hibernate/orm/5.2/userguide/html_single/Hibernate_User_Guide.html#fetching-strategies

Рекомендация Hibernate состоит в том, чтобы статически помечать все ассоциации как ленивые и использовать стратегии динамической выборки для рвения. К сожалению, это противоречит спецификации JPA, в которой определено, что все связи «один к одному» и «многие к одному» должны выбираться по умолчанию. Hibernate, как поставщик JPA, соблюдает это значение по умолчанию.

Вы бы просто отметили обе стороны отношений как ленивые:

@OneToMany(mappedBy = "...", fetch = FetchType.LAZY)
@OneToOne(fetch = FetchType.LAZY)
@ManyToOne(fetch = FetchType.LAZY)

Значения по умолчанию для сопоставлений (если вы не укажете fetch):

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