Отображение внешнего ключа гибернации? - PullRequest
0 голосов
/ 02 ноября 2009

У меня есть объект A, у которого есть внешний ключ объекта B:

entity A --> id, entity_a_name, foreign_key_entity_B 

Когда я звоню

return session.createCriteria(EntityA.class).list();  

Я также получаю свойство entityB внутри объекта A. Как сделать так, чтобы он загружался лениво, чтобы он не загружал enityB, если он не нужен?

Ответы [ 2 ]

1 голос
/ 02 ноября 2009
  • @ LazyCollection : определяет параметр ленивости в @ManyToMany и @OneToMany ассоциации. LazyCollectionOption может быть TRUE (коллекция ленивая и будет загружается при обращении к его состоянию), ЭКСТРА (коллекция ленивая и все операции будут пытаться избежать загрузки коллекции, это особенно полезно для огромных коллекции при загрузке всех элементы не нужны) и ЛОЖЬ (ассоциация не ленивая)

  • @ Fetch : определяет стратегию выборки, используемую для загрузки ассоциация. FetchMode может быть SELECT (выбор срабатывает, когда ассоциация должна быть загружена), SUBSELECT (доступно только для коллекции, используйте подвыбор стратегия - пожалуйста, обратитесь к Справочная документация по Hibernate для больше информации) или ПРИСОЕДИНЯЙТЕСЬ (используйте SQL JOIN для загрузки ассоциации при загрузке владельца объекта). ПРИСОЕДИНИТЬСЯ переопределяет любой ленивый атрибут (как общение загружается через JOIN стратегия не может быть ленивой).

1 голос
/ 02 ноября 2009

Из вашего описания неясно, о каких типах отношений вы говорите, но если это «многие к одному» или «один к одному», все не так просто. Если A.entityB имеет значение NULL (не обязательно), то Hibernate вынужден загружать отношения, чтобы увидеть, имеет ли свойство значение NULL. Только пометив отношение как необязательное (в этом случае Hibernate предполагает , что оно не равно нулю, поскольку в противном случае это ошибка), вы можете заставить его загружаться лениво.

...