|
|
|
Hibernate tree structure + join fetch
|
|||
|---|---|---|---|
|
#18+
Есть класс: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Даже если сделать "...join fetch objects...", то при обращении к ним через getParent()/getChilds() вылетает LazyInitializationException. Как это решить? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.06.2016, 18:48 |
|
||
|
Hibernate tree structure + join fetch
|
|||
|---|---|---|---|
|
#18+
Работает с FetchType.EAGER, но не хотелось бы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.06.2016, 18:57 |
|
||
|
Hibernate tree structure + join fetch
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2016, 07:23 |
|
||
|
Hibernate tree structure + join fetch
|
|||
|---|---|---|---|
|
#18+
no56892, Я уже десяток раз объяснял, вы бы хоть поиском посмотрели. Вариантов несколько. - Самый правильный это динамически управлять Fetch для каждого конкретного случая, чтобы загружать только те ассоциации, которые вам нужны в конкретном сценарии. Для этого есть FetchMode в Criteria API, fetch в HQL и теперь даже Fetch Profiles, ещё не пользовал, но, похоже, очень полезная штука. - Вариант попроще, держать сессию открытой, расширяя область действия транзакции и сессии. Называется Open Session In View. Имеет ряд недостатков. - Ну, и самый корявый вариант в лоб, эдакий FetchMode для бедных - насильно прогрузить зависимости, например, через HibernateUtils, но до того как закроется сессия. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2016, 08:23 |
|
||
|
Hibernate tree structure + join fetch
|
|||
|---|---|---|---|
|
#18+
no56892Даже если сделать "...join fetch objects...", то при обращении к ним через getParent()/getChilds() вылетает LazyInitializationException. Как это решить? Интересно, а что вас удивляет, то что fetch objects по какой-то странной причине выбирает только objects, но не выбирает другие зависимости?? Кстати, а getParent() по умолчанию не должен быть ленивым, это же обычное свойство. Его нужно обязательно проксировать для ленивости. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2016, 08:39 |
|
||
|
Hibernate tree structure + join fetch
|
|||
|---|---|---|---|
|
#18+
no56892Есть класс: Ещё хочется отметить что такой банальный способ хранения деревьев в реляционной БД далеко не самый удобный. Есть другие способы оптимизированные под разные задачи. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2016, 08:40 |
|
||
|
Hibernate tree structure + join fetch
|
|||
|---|---|---|---|
|
#18+
Я, наверное, не до конца написал в чем проблема. Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. Как написать join fetch рекурсивно? Типо join fetch tr.childs.objects tr2 join fetch tr.childs.childs.objects )) и т.д. По структуре - базу менять нельзя. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2016, 10:30 |
|
||
|
Hibernate tree structure + join fetch
|
|||
|---|---|---|---|
|
#18+
no56892, Тогда есть такие варианты. - Написать HQL с fetch до определенного уровня. Для глубокого дерева будет уродливо. - Инициализировать рекурсивно в коде. Правда, в этом случае будет много запросов, а не толстый JOIN - Выгрести все нужные ноды с fetch на детей, а потом уже построить дерево по выборке. - Но! По-моему именно здесь должен подойти как нельзя кстати Fetch Profile. Если вы утверждаете что FetchType.EAGER решает проблему (точно ли?), то можно его активировать для нужной сессии перед выборкой. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2016, 10:41 |
|
||
|
|

start [/forum/topic.php?fid=59&tid=2123938]: |
0ms |
get settings: |
10ms |
get forum list: |
19ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
86ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
43ms |
get tp. blocked users: |
2ms |
| others: | 243ms |
| total: | 425ms |

| 0 / 0 |
