powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Hibernate, работа с Session
25 сообщений из 156, страница 2 из 7
Hibernate, работа с Session
    #37612472
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2/
если ты не пойдёшь по методу 2, то как ты будешь присоединять к транзакции отложенную подгрузку объектов?
Ты же не всё на вкладках будешь грузить на первый рендеринг страницы? Типа AJAX?
...
Рейтинг: 0 / 0
Hibernate, работа с Session
    #37612666
slippery
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Petro123хотя ты наверно имел ввиду - по БЛ блокируется ВСЯ информация ограниченная кнопкой Редактировать, а технически это можно сделать Одной блокировкой заказчика.
Тогда ОК

да именно это я и имел ввиду, но вопрос остается открытым, то есть сделав так:

MObject obj1 = new MObject();
MObject obj2 = new MObject();

session.saveOrUpdate(obj1);
session.saveOrUpdate(obj2);


а потом вот так List list = session.createQuery("from Mobject").list();

я не получу 2 дабавленных объекта, то есть 2 добавленных заказа и аналогично если я удалю пару заказов из списка и снова запрошу список заказов, то удаленные заказы снова придут в результат. Так вот как можно сделать так, чтоб удаленные в этой сессии заказы не попадали в выборку??? Ну и как чтоб попадали добавленные? Сейчас это главная проблема для меня, которую я не знаю как оптимально решить.......очень жду советов
...
Рейтинг: 0 / 0
Hibernate, работа с Session
    #37612675
slippery
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Petro1232/
если ты не пойдёшь по методу 2, то как ты будешь присоединять к транзакции отложенную подгрузку объектов?
Ты же не всё на вкладках будешь грузить на первый рендеринг страницы? Типа AJAX?

так объект в сессии, а сессия не закрывается, я начинаю новую транзакцию и дергаю у этого объекта лази поле и все и в конце закрываю транзакцию. Или если мне еще нужны данные то просто тоже в этой же сессии открываю транзакцию подгружаю данные которые попадают в сессию и закрываю транзакцию. Делаю я это при следующих обращениях к другим вкладкам, это в теории я еще не все успел попробовать. Или я не так понял вопроса? меня сейчас более волнует как решить вопросы заданные мной в предыдущем посту.
...
Рейтинг: 0 / 0
Hibernate, работа с Session
    #37612689
svenom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Еще раз - запрос на то и запрос, что бы быть отправленным в БД. Есть в БД записей нету, то вы никак не можете их вернуть через запрос. Никак. Надо делать flush(), точка.
Если flush() делать нельзя, ок - тогда пересматривайте свой подход в целом, так как ваша проблема звучит уж очень надуманной и высосанной из пальца. Опишите подробнее решаемую задачу - постараемся что-нибудь посоветовать.
...
Рейтинг: 0 / 0
Hibernate, работа с Session
    #37612762
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
svenom,
разве при выкл. 2 кэше нужно делать session.flush?
Сброс в БД не автоматом?
...
Рейтинг: 0 / 0
Hibernate, работа с Session
    #37612773
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123svenom,
разве при выкл. 2 кэше нужно делать session.flush?
session.flush() сбрасывает кэш 1го уровня - саму сессию.
кэш второго уровня к этому отношения не имеет.

Petro123Сброс в БД не автоматом?
Это отдельная фича. Если понять персистент объект в транзакции, то при коммите транзакции хибер сохранит состояние в БД автоматом.
...
Рейтинг: 0 / 0
Hibernate, работа с Session
    #37612791
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz,
ок.
Самый простой вариант:
- session.flush
- закрыть сессию
Без ОБОИХ строк в БД будет пусто?
...
Рейтинг: 0 / 0
Hibernate, работа с Session
    #37612795
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я просто думал, что 1 уровень всегда синхрон с БД, если общаться исключ. через хибер.
Типо автокоммита.
?
...
Рейтинг: 0 / 0
Hibernate, работа с Session
    #37612819
svenom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В общем, понял я вашу проблему. Есть два решения. Одно умное, правильное, но геморное. Второе топорное, кривое, но быстрее.
Изначально проблема заключается в том, что вы пытаетесь переложить на сессию Хибера то, для чего она не предназначена. А именно - поддержание состояния работы пользователя между запросами. Так вот, этим должна заниматься не сессия Хибера, а сессия сервелета, а логика поддержания этого состояния должна поддерживаться вами вручную.
1) Правильное решение - писать код самому, который будет отслеживать изменения пользователя. Это будут скорее всего тупо POJO с минимумом логики и в основном геттерами - сеттерами. В итоге - для всех операций пользователя вы будете только считывать данные из БД, то есть открыли сессию Хибера, быстро считали, закрыли. И лишь последним действием - сохранением - вы переносите все изменения из сессии сервлета в сессию Хибера и комитите их.
2) Дерьмовое решение - полезть в непубличный API Хибера. То есть берете сессию, кастите ее до SessionImpl и начинаете копаться в потрохах Хибера. Примеры: а) вызвать sessionImpl.gtPersistenceContext() и порыться там; б) вызвать sessionImpl.getActionQueue(), потом через рефлекшн получить значения закрытых полей insertions/deleteions/updates и что-нибудь замутить с ними; в) вызвать sessionImpl.getListeners() и выставить своих листенеров на события.
Но учтите, что пойдя вторым путем, вы испортите свою карму, совершив акт говнокодерства. Еще несколько таких проступков - и бессмертный дух говнокодерства поработит вас
...
Рейтинг: 0 / 0
Hibernate, работа с Session
    #37612821
svenom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123я просто думал, что 1 уровень всегда синхрон с БД, если общаться исключ. через хибер.
Типо автокоммита.
?Это настриваемо.
...
Рейтинг: 0 / 0
Hibernate, работа с Session
    #37612844
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123 Самый простой вариант:
- session.flush
- закрыть сессию
Без ОБОИХ строк в БД будет пусто?
Зависит от управления транзакциями. В нормальном случае ничего делать не нужно. Вот пример апдейт метода:

Код: java
1.
2.
3.
4.
5.
6.
@Transactional(readOnly=false)
setEntityName(String name, Serializable pk){
      getSession()
        .get(Entity.class, pk)
        .setName(name);
}
...
Рейтинг: 0 / 0
Hibernate, работа с Session
    #37612930
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Аффтар держись. Счас у тебя будет куча решений.:)
...
Рейтинг: 0 / 0
Hibernate, работа с Session
    #37613074
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
svenom
мы пока отвлеклись от вопроса. Если будем писать так много, то будет опять флейм "как хранить состояние с ОРМ"
:)
BlazkowiczВ нормальном случае ничего делать не нужно
я тоже про это.
1 кэш это технический кэш. Он не может быть рассогласован.
Вопрос:
- кто даст пример и
- почему выше код не работает?
ЗЫ. там нет старт транзакции, но думаю это не нужно пока?
...
Рейтинг: 0 / 0
Hibernate, работа с Session
    #37613109
svenom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123 ,
Причина проблемы озвучена выше, решение озвучено выше. Читайте внимательнее.
...
Рейтинг: 0 / 0
Hibernate, работа с Session
    #37613120
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
OK
svenomЭто настриваемо.
уточни, если не трудно, где и как

Аффтар !
твой код не работает в одной сессии хибера?
Т.е. сделай пример с "Session-Per-Request"
Одна сессия хибера на одну реквеста.
Несколько реквестов (состояние) потом.
...
Рейтинг: 0 / 0
Hibernate, работа с Session
    #37613131
svenom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123OK
svenomЭто настриваемо.
уточни, если не трудно, где и как
session.setFlushMode(FlushMode.???);
...
Рейтинг: 0 / 0
Hibernate, работа с Session
    #37613155
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
svenom,
лучше так:
авторбольшинству приложений редко нужно указывать flush() явно....
FlushMode.AUTO – по умолчанию.


с этим Flush выяснили
- указывать не надо (пока)

Вопрос про код выше остался.
______________________________________________
"Сделай настолько просто, насколько это возможно, но не проще". © А. Эйнштейн.
AutoPOI.ru — ГИС-технологии для Oracle
...
Рейтинг: 0 / 0
Hibernate, работа с Session
    #37613157
svenom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сформулируйте вопрос.
...
Рейтинг: 0 / 0
Hibernate, работа с Session
    #37613165
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123Вопрос:
- кто даст пример для одной сессии и
- почему выше код автора не работает?
...
Рейтинг: 0 / 0
Hibernate, работа с Session
    #37613183
svenom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1. Пример чего надо привести?
2. Пример автора не работает, так как информация об удаленных/сохраненных объектах находится в кеше первого уровня и не был выполнен flush(), а HQL запрос лезет напрямую в базу, минуя кеш первого уровня.
...
Рейтинг: 0 / 0
Hibernate, работа с Session
    #37613199
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
svenom1. Пример чего надо привести?

==== рабочий пример с настройками по умолчанию. Желательно без flush

2. Пример автора не работает, так как информация об удаленных/сохраненных объектах находится в кеше первого уровня и не был выполнен flush(), а HQL запрос лезет напрямую в базу, минуя кеш первого уровня.

===== покажите как лезть не в БД, а оперативку
...
Рейтинг: 0 / 0
Hibernate, работа с Session
    #37613224
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123===== покажите как лезть не в БД, а оперативку
[/quot]
new HashSet(list).put(obj1);
...
Рейтинг: 0 / 0
Hibernate, работа с Session
    #37613244
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz,
ммммм. вы профи, но вы так кратки )
Как вставить объект в сессию и прочитать из сессии-оперативы?
Или добавьте свой код к коду автора?

session.saveOrUpdate(obj2);
опять достать?
...
Рейтинг: 0 / 0
Hibernate, работа с Session
    #37613272
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123session.saveOrUpdate(obj2);
опять достать?

Не поверишь.
session.get() вернет obj2 без сбрасывания всего кэша в базу.
...
Рейтинг: 0 / 0
Hibernate, работа с Session
    #37613281
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вообще складывается впечатление, что автор из ORM пытается получить функциональность Detached Data Set.
Хибернейт не умеет рабоать в оффлайне, накапливая изменения, чтобы потом их все сбросить. Если для каких-либо операций ему нужно будет получить акутальное состояние из базы, он сам сессию зафлашит, без явного вызова session.flush()

Поэтому если изменения надо накапливать, это стоит делать отдельным инструментом а не самой сессией.
...
Рейтинг: 0 / 0
25 сообщений из 156, страница 2 из 7
Форумы / Java [игнор отключен] [закрыт для гостей] / Hibernate, работа с Session
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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