|
|
|
Hibernate Lazy Loading, List - траблы при построении таблицы /добавление новых строк
|
|||
|---|---|---|---|
|
#18+
Привет всем, пару часов назад нах выкинул fetch = FetchType.LAZY и заменил на EAGER в имеющихся у меня сущностях на связях OneToMany. А сделал это вынужденно, так запарился дебагить передебагить код:-(( Задача (упрощенно) следующая - имеется сторонее приложение, где хранятся АйДи ежедневников. В этом стороннем приложении ежедневники представлены... в виде дерева. При этом стороннее приложение не хранит никакой иной информации кроме Айдишки ежедневиков. Имеется требование, представлять ежедневник в виде таблиц, "рисуемых" веб-приложением на фреймворке ВААДИН 6.х. При навигации по дереву в стороннем приложении должны в веб-приложении соотв. таблички представлять, которые имеют сл. структуру: Столбцы - это часы (от 0 до 24 с шагом в час). Строки - люди, которые должны выполнять задания. Смоделировано это следующим образом (вкратце): [Ежедневник] один-ко-многим-к-[Исполнитель] (отображено на яве как java.util.List: т.е Ежедневник содержит java.util.List с Исполнителями. Отображено на БД с помощью отдельного аттрибута, генерируемого хибернейтом изза наличия @OrderColumn аннотации на java.util.List Исполнителей) [Ежедневник] один-ко-многим-к-[время-суток] (отображено на яве как java.util.Set)... В таблицу ежедневика должно быть возможным добавить новые строки - упорядочить людей. Таблица редактируемая - допустимо как вводить задания так и удалять/перемещать строки. Теперь о проблемках, когда были связи с OneToMany с FetchType.LAZY : Добавил я допустим, новую персону в таблицу, вызвав соотв. методу бизнес-сервиса (где соотв. DAO "пашет"). Отображается все корректно. Состояние БД с представлением - синхронно. Теперь добавляю вторую строку и тут наступает жопса: в когда я подгружаю ежедневник с hibernateSession.get по айдишке, не смотря на то, что в Базе Данных по этому айди находится соотв. ранее сохраненная персона, когда я спрашиваю "а-дайка-мне-ежедневник-упорядоченные-персоны", он мне возвращает 0 назад (Что видимо с тем связано, что "ленивая" закрузка выставлена и я явно НЕ опрашивал каждый элемент java.util.List ). И вот в такой ежедневник добавляется Это приводит к тому, что БД в таблице, где Исполнители сохранены, появляются две строки с responslibleperson_order, имеющим значение 0. Т.е. грубо говоря индексу 0 java.util.List упорядочены...два элемента. Хибер это решает тем, что берет один из элементов и им инициализирует. Если я FetchType.EAGER выставляю, такой проблематики не возникает. java.util.List для хранения исполнителей я взял, дабы в модели не хранить спецом позиции упорядоченной персоны. Перемещение вверх-вниз по таблице реализовал, юзая обычное переупорядочивание индексов в листе с удалением/добавлением елемента. (игнорируюя пока 1+N проблемку) В настоящее время подумываю вообще убрать java.util.List и заменить его на java.util.Set и добавить к сущности Исполнитель свойство "порядковый-номер" (нО при этом придется ручками нумеровать/перенумеровывать) Такие дела. Ежели подобные проблемы возникали, хотелось бы узнать как их читатели темы решали. Спасиб:-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.07.2013, 19:06:29 |
|
||
|
Hibernate Lazy Loading, List - траблы при построении таблицы /добавление новых строк
|
|||
|---|---|---|---|
|
#18+
Вот тут примеры приводились вариантов работы с ленивыми списками. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.07.2013, 19:53:45 |
|
||
|
Hibernate Lazy Loading, List - траблы при построении таблицы /добавление новых строк
|
|||
|---|---|---|---|
|
#18+
IDVsbruckВот тут примеры приводились вариантов работы с ленивыми списками. я в курсе вариантов - Hibernate.initialize использую в DAO, когда коллекции вынимаю. В случае, когда я беру ежедневик по айдишнику, я этого не делал. Если делать на каждой операции вызов Hibernate.initialize - то имхо смылса вообще нет в ленивой загрузке. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.07.2013, 20:35:14 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=38328590&tid=2129003]: |
0ms |
get settings: |
9ms |
get forum list: |
19ms |
check forum access: |
5ms |
check topic access: |
5ms |
track hit: |
49ms |
get topic data: |
16ms |
get forum data: |
3ms |
get page messages: |
53ms |
get tp. blocked users: |
2ms |
| others: | 291ms |
| total: | 452ms |

| 0 / 0 |
