![]() |
|
Модераторы: LSD, AntonSaburov |
![]()
|
|
| serious |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 316 Регистрация: 15.2.2003 Где: Пенза Репутация: нет Всего: 1 |
Вешаю на все свойства доменного объекта аннотации:
для простого свойства
или для связанного объекта
но в логах видно, что Hibernate тащит объект полностью + еще связанные объекты. Вопросы: Почему он ПОЛНОСТЬЮ забил на эти хинты? Есть ли другой способ добавить "ленивости" доменным объектам? Это сообщение отредактировал(а) serious - 11.1.2007, 19:58 -------------------- Я знаю то, что ничего не знаю, а некоторые не знают и этого. |
||||
|
|||||
| tux |
|
|||
![]() Летатель ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1853 Регистрация: 10.2.2005 Где: msk.ru Репутация: 74 Всего: 132 |
Аннотациями никогда не пользовался. В маппингах xml, все работает как часы, только для того, чтобы работало надо задать свойство lazy="true". Как это в аннотациях не знаю.
|
|||
|
||||
| serious |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 316 Регистрация: 15.2.2003 Где: Пенза Репутация: нет Всего: 1 |
А в чем принципиальная разница? У меня такое ощущение, что кто-то мешает Хибернейту использовать ленивость для этих объектов... -------------------- Я знаю то, что ничего не знаю, а некоторые не знают и этого. |
|||
|
||||
| serious |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 316 Регистрация: 15.2.2003 Где: Пенза Репутация: нет Всего: 1 |
Если поле хранится большой объем данных (большой блок текста или бинарные данные), то можно попробовать соптимизировать ӕто, добавив аннотацию @Lob. В сосвокупности с lazy-загрузкой (@Basic(optional = true, fetch = FetchType.LAZY)), Hibernate должен тащить ӕто поле только по требованию. Можно поюзать еще и такой прием: объекты имеют свойство раздуваться, поӕтому если есть Rich-класс, то можно попробовать разбить его на несколько, в нужных местах включив "ленивую" загрузку, т.е. выполнить декомпозицию. Если используются коллекции, то имеет смысл также поюзать аннотацию @LazyCollection(value=LazyCollectionOption.EXTRA), причем также в совокупностью с аннотацией вида @OneToMany(fetch = FetchType.LAZY, mappedBy = "some_class").
Кто что думает по ӕтому поводу? Добавлено через 2 минуты и 56 секунд По поводу мӕппингов через xml... Не знаю, по-моему ӕтим уже никто не пользуется, все перешли на аннотации. Или я ошибаюсь -------------------- Я знаю то, что ничего не знаю, а некоторые не знают и этого. |
|||
|
||||
| Tony |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1159 Регистрация: 3.3.2006 Где: Riga Репутация: 6 Всего: 12 |
Ошибаешся. |
|||
|
||||
| Maksym |
|
|||
![]() . ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1456 Регистрация: 19.8.2005 Где: Odessa, Black Sea Репутация: 24 Всего: 62 |
serious
На аннтотации как минимум не перешли те, кто работает на java младше 5. А таких ооочень много, особенно в консервативных отраслях типа банковской.. |
|||
|
||||
| chief39 |
|
|||
![]() карманная тигра ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1631 Регистрация: 20.5.2005 Где: Киев Репутация: 11 Всего: 77 |
Почему консервативные? Просто многие большие системы очень долго дорого переводить. Я вот тоже на треингах вещаю о прелестях 3.0 еджиби, наслаждаюсь красотой и изяществом аннотаций и показываю как, на самом деле, всё легко и просто, а потом возвращаюсь из митинг-рума... а тут опять 2.1 Но перевод займёт очень много времени и добавит сотни больших и маленьких багов. И я первый буду против -------------------- Люди - это свечи. Они либо горят, либо их - в жопу!(с) |
|||
|
||||
| Maksym |
|
|||
![]() . ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1456 Регистрация: 19.8.2005 Где: Odessa, Black Sea Репутация: 24 Всего: 62 |
chief39
Сказал консервативные в лучшем смысле этого слова По моим наблюдениям дело не только в том что долго и даже не в том что дорого, а в том что бизнес уже заплатил за эту функциональность и получил её. А насколько это изящно реализовано никого особо не беспокоит, особенно если система протестирована и не требует серьезного саппорта. И даже низкую производительность будут терпеть до самого последнего лишь бы не трогать то что уже работает, а главное не платить дважды за одно и то же. |
|||
|
||||
| ShamanTrirukiy |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 65 Регистрация: 12.4.2006 Где: Харьков Репутация: нет Всего: 5 |
На сколько я чего-то понял, для ленивых загрузок необходима открытая сессия. Можно ли это как-то обойти, если загрузка объектов делается следующим образом:
Т.е. сессия закрывается сразу же после выборки. Поделитесь пожалуйста опытом решения подобной проблемы. Держать открытой сессию вроде как нельзя (проект рассчитан на ~200 пользователей, (сразу же вопрос - никто не знает, что будет при пуле в 200 коннекшинов?) да и не ясно, когда соединение закрывать). |
|||
|
||||
| polosatij |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1143 Регистрация: 22.2.2004 Где: Stuttgart<-> ;Karlsruhe, Germany Репутация: 3 Всего: 8 |
насколько я понимаю ты возвращаешь обьект из сессии.. я делал всегда иначе => если getUniqueValue возврашает коллекцию типа ArrayList, я делал следующее:
возможно я могу ошибаться, тогда поправьте меня и я свой код тоже подправлю |
|||
|
||||
| ShamanTrirukiy |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 65 Регистрация: 12.4.2006 Где: Харьков Репутация: нет Всего: 5 |
Похоже, я привёл не совсем правильный пример. List в моём случае - поле у объектов, выбраных из базы. Его и надо инициализировать лишь при обращении к нему из приложения.
Ты сразу же после выборки из базы инициализируешь коллекцию, т.е. "ленивость" не используется как факт. Это сообщение отредактировал(а) ShamanTrirukiy - 19.4.2007, 12:05 |
|||
|
||||
| chief39 |
|
|||
![]() карманная тигра ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1631 Регистрация: 20.5.2005 Где: Киев Репутация: 11 Всего: 77 |
serious, я не уверен, но мне кажется, что это не директива, а подсказка контейнеру. И он сам принимает решение тянуть/не тянуть всё сразу.
-------------------- Люди - это свечи. Они либо горят, либо их - в жопу!(с) |
|||
|
||||
![]()
|
| Правила форума "Java" | |
|
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |