powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / vaadin, lazy container, hibernate
25 сообщений из 39, страница 1 из 2
vaadin, lazy container, hibernate
    #39439523
Nixic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте!
Помогите, пожалуйста, определиться с проблемой и её решением.
Есть веб-аппликейшен на ваадин.
Есть в нем таблица, которая принимает данные в виде List<T>
Данные я получаю примерно так:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
 public List<DinamicProduct> getDinamicProductByOffer(Offer offer) {
        EntityManager em = EntityManagerProvider.getEntityManager();
        try {
            Query q = em.createQuery("from DinamicProduct as o where o.deleted is false "
                    + " and o.offerId = :offerId ");
            q.setParameter("offerId", offer.getId());
            dinamicProductList = q.getResultList();
            return dinamicProductList;
        } catch (NoResultException ex) {
            return null;
        } finally {
            em.close();
        }
    }


Используя для таблицы контейнер, а именно IndexedContainer, который предоставляет Vaadin, я подгружаю весь список в память, как я понимаю, клиента. То есть ленивая подгрузка как бы и не присутствует. Я ведь прав? Или не совсем.
Попробовал использовать BeanItemContainer, сразу же получил ошибку от хибернейта:
Код: powershell
1.
org.hibernate.LazyInitializationException - could not initialize proxy - no Session


Что, как я понимаю логично, ведь у меня em.close();
Убрал я в блоке файналли этот close, и все данные отобразились без ошибки.

Прочитал, что IndexedContainer и BeanItemContainer, эти контейнеры как описано: An in-memory container for JavaBeans.
То есть не держат сессию открытой, а подгружают в память, как я понял, если правильно понял.

У Vaadin есть аддон, называется Lazy Query Container, как я понял, он поддерживает ленивую подгрузку, почитал его описание, но пока его особенности не совсем понял. Еще краем глаза читал про эклипсЛинк, но не стал вникать.
В общем не совсем понимаю, саму суть этих всех контейнеров, в частности в связке их с хибернейтом и моим способом получения листа данных, которые я контейнеру передаю, может кто-то вкратце описать общий принцип, как и что лучше использовать.
...
Рейтинг: 0 / 0
vaadin, lazy container, hibernate
    #39439527
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторТо есть ленивая подгрузка как бы и не присутствует. Я ведь прав?

В DinamicProduct связи есть?
Я сделал так:

Код: java
1.
<property name="hibernate.enable_lazy_load_no_trans">true</property>



Но не знаю какие могут быть подводные камни, тоже интересно.
...
Рейтинг: 0 / 0
vaadin, lazy container, hibernate
    #39439536
Nixic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HettВ DinamicProduct связи есть?

Да есть и они все с явным указанием Lazy, хоть по-умолчанию оно, вроде как, Lazy.

Hett
Код: java
1.
<property name="hibernate.enable_lazy_load_no_trans">true</property>



Про это тоже читал, но пока не стал вставлять в свой persistence.xml, так как толком не вник в этот проперти
...
Рейтинг: 0 / 0
vaadin, lazy container, hibernate
    #39439541
Nixic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HettВ DinamicProduct связи есть?

Код: java
1.
2.
@ManyToOne(fetch = FetchType.LAZY)
    private Offer offer;


хоть и в коде получения листа данных я использовал "ненормализованное" с точки зрения БД поле offerId, но это не так уж и важно в контексте этой темы.
...
Рейтинг: 0 / 0
vaadin, lazy container, hibernate
    #39439555
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дополню тогда топик связанным вопросом, точнее даже это прямое отношение имеет к нему:

Следующий код работает без транзакции
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
    public Collection<Category> getAvailableCategories() {
        CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder();
        CriteriaQuery<Category> criteriaQuery = criteriaBuilder.createQuery(Category.class);
        Root<Category> rootEntry = criteriaQuery.from(Category.class);
        CriteriaQuery<Category> all = criteriaQuery.select(rootEntry);
        TypedQuery<Category> allQuery = entityManager.createQuery(all);

        return allQuery.getResultList();
    }



А вот такое обращение выкинет ошибку о работе вне транзакции.

Код: java
1.
            Product product = entityManager.find(Product.class, 27);



В чем разница и почему первый работает без транзакции, а второй только внутри?
Как понимаю Lazy подгрузка происходит вторым способом и отсюда же идет необходимость в транзакции?
...
Рейтинг: 0 / 0
vaadin, lazy container, hibernate
    #39439807
Фотография Usman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Nixic,

Было что-то вроде такого...
Решил через Service/DAO-прослойку - метод в сервисе, где и происходит вся работа с БД (Hibernate)
Метод помечается Spring'овым @Transactional
...
Рейтинг: 0 / 0
vaadin, lazy container, hibernate
    #39439809
Фотография Usman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
UsmanService/DAO-прослойкуну, и конечно же, класс сервиса помечается аннотацией @Service
...
Рейтинг: 0 / 0
vaadin, lazy container, hibernate
    #39439811
Фотография Usman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Nixicу меня em .close();этот "зверь" должен быть изолирован от UI (:
...
Рейтинг: 0 / 0
vaadin, lazy container, hibernate
    #39439928
Nixic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
UsmanNixicу меня em .close();этот "зверь" должен быть изолирован от UI (:
Вот тут я немного не понял :)
У меня он в методе, которые в отдельном классе, вроде как изолирован от UI :)
или речь о каком-то другом уровне изоляции?
...
Рейтинг: 0 / 0
vaadin, lazy container, hibernate
    #39439937
Фотография Usman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NixicУ меня он в методе, которые в отдельном классе, вроде как изолирован от UI :)Перечитал первый пост... и понял, что мне не хватило совсем немного телепатических навыков... (:
вобщем, все еще учусь ©
...
Рейтинг: 0 / 0
vaadin, lazy container, hibernate
    #39439951
Nixic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
UsmanNixicУ меня он в методе, которые в отдельном классе, вроде как изолирован от UI :)Перечитал первый пост... и понял, что мне не хватило совсем немного телепатических навыков... (:
вобщем, все еще учусь ©
У меня не используется спринг в этом проекте.
Суть вопроса была в описании вкратце работы контейнеров, в частности их работы в режиме Lazy при использовании хибернейт.
С учетом существующего способа выгребания данных из БД, который, возможно стоит как-то изменить.
Все это для того, чтобы отобразить в таблице ваадина 1000+ строк данных, так, чтобы не засорять память клиента и не вызывать при этом тормозов при прокрутке.
Ну и в описании первого поста есть описания моих подвижек в этом направлении, которые, скорее всего, неправильны в силу отсутствия понимая принципов работы с контейнерами, ленивой подгрузкой данных и сессий хибернейта.
...
Рейтинг: 0 / 0
vaadin, lazy container, hibernate
    #39439958
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вчера 2 книжки пролистал, в которых в оглавлении есть "JPA", но нужный подробностей так и не нашел.
@Transactional - это из спецификации JPA, причем тут спринг? Унаследовали оттуда?
...
Рейтинг: 0 / 0
vaadin, lazy container, hibernate
    #39439959
Фотография Usman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NixicС учетом существующего способа выгребания данных из БД, который, возможно стоит как-то изменить.опять же используйте пагинацию
NixicВсе это для того, чтобы отобразить в таблице ваадина 1000+ строк данных, так, чтобы не засорять память клиента и не вызывать при этом тормозов при прокрутке.IMHO, как по мне, появление вертикального скролла в таблице - плохо.
Конечно, можно задать кол-во строк на страницу. Обычно к пагинации,
в добавок, припиливается функционал поиска/фильтра - пользователь
захотел найти/отфильтровать кое-какие данные, при этом отпадает
необходимость листать стопицот страниц в поисках чего-то нужного.
...
Рейтинг: 0 / 0
vaadin, lazy container, hibernate
    #39439961
Фотография Usman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hettпричем тут спринг?обычно использую в рамках спринга и у них походу своя аннотация.
тынц
...
Рейтинг: 0 / 0
vaadin, lazy container, hibernate
    #39439979
Nixic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
UsmanIMHO, как по мне, появление вертикального скролла в таблице - плохо.
Конечно, можно задать кол-во строк на страницу. Обычно к пагинации,
в добавок, припиливается функционал поиска/фильтра - пользователь
захотел найти/отфильтровать кое-какие данные, при этом отпадает
необходимость листать стопицот страниц в поисках чего-то нужного.
Да, абсолютно согласен, но пользователям этим нужная вся портянка, они привыкли к экселю, где 255000 или сколько у него там строк вниз по умолчанию и хотят, чтобы было так же и здесь. Пагинацию я могу добавить и скорее всего попытаюсь позже, но уже используя компонент Vaadin'a Grid, вот только его немного допилят (вроде как скоро уже).
Фильтрацию, конечно же, тоже использую, в данном случае так называемый поиск по названию и по группе товара.

Суть бизнеса для которого я это пишу - продажи. У них бывают большие, с точки зрения времени работы над ними сотрудниками, заявки в 1000-2000 строк товара. Это процентов 10 примерно из всех. Но их тоже нужно отрабатывать. В этом случае пагиннация, особенно если сделать строк по 30 на "страницу" будет не совсем уместна.

Просто я вижу в примерах где используется 1 000 000 строк в таблице, при этом можно соскролиться ближе к концу и отредактировать (вот здесь не уверен, примера не видел) данные в строке. А у меня лажа какая-то уже при 500+ строк с этими лейзи не лейзи :))
...
Рейтинг: 0 / 0
vaadin, lazy container, hibernate
    #39439980
Nixic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ах да и самая большая "проблема" почему здесь может быть неуместна паггинация - позиции могут повторяться, причем несколько раз во всем списке из 1000 позиций, одни могут быть в начале, другие в конце. И не просто повторяться, а называться по разному, начинаться с разных слов/букв, но по сути это один и тот же товар. Даже отсортировав по имени можно что-то упустить.
Вот поэтому они и бьются за то, чтобы все было на одной странице в таблице. Как в Экселе) Хотя все это дело привычки и внимательности сотрудников.
В общем с лейзи надо все равно что-то делать :)
...
Рейтинг: 0 / 0
vaadin, lazy container, hibernate
    #39440120
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Nixic,
Вы в своем уме, 250тыс.строк на клиенте?
У вас будет либо нобелевская, либо Белая ворона. Выбирайте.
...
Рейтинг: 0 / 0
vaadin, lazy container, hibernate
    #39440161
mad_nazgul
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NixicАх да и самая большая "проблема" почему здесь может быть неуместна паггинация - позиции могут повторяться, причем несколько раз во всем списке из 1000 позиций, одни могут быть в начале, другие в конце. И не просто повторяться, а называться по разному, начинаться с разных слов/букв, но по сути это один и тот же товар. Даже отсортировав по имени можно что-то упустить.
Вот поэтому они и бьются за то, чтобы все было на одной странице в таблице. Как в Экселе) Хотя все это дело привычки и внимательности сотрудников.
В общем с лейзи надо все равно что-то делать :)

Разницы, в том что человек видит 10 строк и > 10 строк практически никакой.
А Ексель удобен для "сверки" тем что там удобный механизм фильтрации данных.
Дайте гриду с удобной фильтрацией и не нужна будет портянка данных.
На крайний случаей есть стильно-модно-молодежный способ "бесконечного скролинга".
Когда данные отдаются как при пагинации, но просто добавляются вконец.
А передавать туда-сюда портянки данных из 10 000 строк, как-то не правильно.
...
Рейтинг: 0 / 0
vaadin, lazy container, hibernate
    #39440304
Nixic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mad_nazgulNixicАх да и самая большая "проблема" почему здесь может быть неуместна паггинация - позиции могут повторяться, причем несколько раз во всем списке из 1000 позиций, одни могут быть в начале, другие в конце. И не просто повторяться, а называться по разному, начинаться с разных слов/букв, но по сути это один и тот же товар. Даже отсортировав по имени можно что-то упустить.
Вот поэтому они и бьются за то, чтобы все было на одной странице в таблице. Как в Экселе) Хотя все это дело привычки и внимательности сотрудников.
В общем с лейзи надо все равно что-то делать :)

Разницы, в том что человек видит 10 строк и > 10 строк практически никакой.
А Ексель удобен для "сверки" тем что там удобный механизм фильтрации данных.
Дайте гриду с удобной фильтрацией и не нужна будет портянка данных.
На крайний случаей есть стильно-модно-молодежный способ "бесконечного скролинга".
Когда данные отдаются как при пагинации, но просто добавляются вконец.
А передавать туда-сюда портянки данных из 10 000 строк, как-то не правильно.
))))
уффф)) да дам я гриду все фильтры, дам :)
Вопрос-то не в этом совсем. И даже не в том, что надо видеть 250тыс строк сразу на клиенте, кстати это был пример как работают со строками в экселе, что юзерам надо так же чтоб было быстро и чтоб много-много строчек и чтоб еще осталось, ограничимся парой тысяч строк.
Дак вот чтобы они все отображались по мере необходимости, то есть была ленивая подгрузка, что вниз мы крутим, что вверх крутим, все одно и не тормозит. Пагинация не рассматривается, так как она заставляет юзера щелкать мышой лишний раз прицельно, вместо плавного кручения колеса мыши. Вопрос был про контейнеры и их свойства, про их применяемость в том или ином случае, про их особенности в кратце.
А то блин началось, 250000 строк отдаем на клиента и получаем нобелевку )))
...
Рейтинг: 0 / 0
vaadin, lazy container, hibernate
    #39440490
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Nixic,
скоро на вторую страницу пойдём.
1. Дай ссылку на таблицу ваадин с ленивой подгрузкой. Помнится они обещали такую сделать пару лет назад.
Сделали?
Если нет, то что ты тут обсуждаешь?
2. 2000 строк за раз вполне можно делать с пагинацией. Я правда видел 1000, а не 2000, но мы же о веб проекте говорим.
И не сравнивай веб проект с Excell десктоп. Найди хоть один пример в Веб просторах.
...
Рейтинг: 0 / 0
vaadin, lazy container, hibernate
    #39440494
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Причем тут пагинация, если у ТСа ошибка вываливается на уровне JPA, при ленивой загрузке связей.
...
Рейтинг: 0 / 0
vaadin, lazy container, hibernate
    #39440504
Nixic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123Nixic,
скоро на вторую страницу пойдём.
1. Дай ссылку на таблицу ваадин с ленивой подгрузкой. Помнится они обещали такую сделать пару лет назад.
Сделали?
Если нет, то что ты тут обсуждаешь?
Ага! Ну вот уже, что-то. То есть получается, у компонента Table вообще не может быть ленивой подгрузки?
Пока это писал, решил глянуть, нарыл, что лейзиЛоадинг у Table идет на уровне контейнера. Я точно не уверен что правильно сейчас скажу, но получается, что все зависит от контейнера, в данном случае.
А если брать Grid, то там это уже на уровне компонента реализовано, так получается?
Я вот саму суть работы с контейнерами не понял, именно в отношении ленивой подгрузки. Вот и подумал, что, кто-нибудь вкратце ткнет носом куда надо))
Пока буду рыть спеки и оф.документацию по всем этим делам, может что прояснится в итоге.
...
Рейтинг: 0 / 0
vaadin, lazy container, hibernate
    #39440506
Nixic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123И не сравнивай веб проект с Excell десктоп.
А если надо? :)
Кстати, я не видел как работа с таблицами сделана в 1С, у них же тоже есть веб-поддержка интерфейса какая-то, у них-то явно большие объемы данных и в теории веб должен бы соответствовать десктопной версии ПО.
...
Рейтинг: 0 / 0
vaadin, lazy container, hibernate
    #39440507
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HettПричем тут пагинация, если у ТСа ошибка вываливается на уровне JPA, при ленивой загрузке связей.
наверно при том, что не надо про неё рассказывать сказки и пугать детей.
...
Рейтинг: 0 / 0
vaadin, lazy container, hibernate
    #39440508
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NixicА если надо? :)
сильверлайт хотел но помер. Слыхал?
Nixicв 1С
нету у них веб версии. Вернее есть, но никто не использует.
...
Рейтинг: 0 / 0
25 сообщений из 39, страница 1 из 2
Форумы / Java [игнор отключен] [закрыт для гостей] / vaadin, lazy container, hibernate
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]