powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / I hate hibernate (NonUniqueObjectException, merge & cache)
14 сообщений из 14, страница 1 из 1
I hate hibernate (NonUniqueObjectException, merge & cache)
    #38207059
Шаров Сергей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Проблема следующая:

В WEB сессии хранится объект (facade) у которого есть два свойства, которые должны ссылаться на один объект.

NonUniqueObjectException возникает, когда я пытаясь сохранить facade и только тогда, когда оба свойства ссылаются на обьект с одним ID. Почему это происходит я разобрался. Поскольку один и тот же объект получен из DAO в разных хибер.сессиях, то оба свойства указывают фактически на _разные_ объекты, но с одним ID. Для меня это один объект, а для хибера разные :(.

То есть
1) при заполнении первого свойства, я сделал запрос через DAO и получил объект (ИД=5) в одной хибер. сессии,
2) при заполнении второго свойства, я сделал запрос через DAO и получил объект (ИД=5) в _другой_ хибер. сессии,
3) при сохранении (saveOrUpdate( facade) ) создалась третья сессия, где два свойства указывают на разные объекты с одним, равным ИД=5.

Хотелось бы, чтобы хибер кешировал запросы к одному и тому же ИД одной сущности, например, в пункте (2) вернул не новый объект с ИД=5, а ссылку на объект созданный в (1) с тем же ИД.

Но при этом не хотелось бы чтобы производилось кеширование объект facade после их записи, т.к. WEb не единственный, кому нужны эти данные :(.

Пробовал заменить
saveOrUpdate(facade)
на
merge(facade)

ТО же самое. Или я не разобрался на чём нужно делать merge или я подозреваю, что у меня отключено кеширование (cache.provider_class=hibernate.cache.NoCacheProvider) или и то и другое, или ни то ни другое :(. Где-то читал, что для WEB лучше NoCacheProvider, но уже забыл где :(.

Самому следить за тем, чтобы использовались одни и те же объекты для ссылок возможно, но слишком "дорого" :(.

Даже не знаю как быть с данной проблемой.

Также я понимаю Хибернате. Он не знает, что я использую только ссылку(без редакирования), также он не знает, были ли объекты изменены или вообще созданы заново и какой из объектов актуален для записи :(.
...
Рейтинг: 0 / 0
I hate hibernate (NonUniqueObjectException, merge & cache)
    #38207127
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Шаров Сергей,
сессии хибера надо закрывать. Стараться без причины не работать с одним объектом из разных сессиий. Т.к. _примерно_ сессия хибера равна сессии любого пользователя.
...
Рейтинг: 0 / 0
I hate hibernate (NonUniqueObjectException, merge & cache)
    #38207142
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
По-моему merge() надо вызвать для объектов, которые получены в других сессиях, перед тем как их использовать в текущей.
Ну, и кэш второго уровня, стоит попробовать включить, чтобы свести к минимуму обращения к базе.
...
Рейтинг: 0 / 0
I hate hibernate (NonUniqueObjectException, merge & cache)
    #38207164
rdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Шаров СергейПроблема следующая:

В WEB сессии хранится объект (facade) у которого есть два свойства, которые должны ссылаться на один объект.


То есть
1) при заполнении первого свойства, я сделал запрос через DAO и получил объект (ИД=5) в одной хибер. сессии,
2) при заполнении второго свойства, я сделал запрос через DAO и получил объект (ИД=5) в _другой_ хибер. сессии,


Зачем тогда 2) если "которые должны ссылаться на один объект"?
...
Рейтинг: 0 / 0
I hate hibernate (NonUniqueObjectException, merge & cache)
    #38207182
Шаров Сергей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123сессии хибера надо закрывать. Стараться без причины не работать с одним объектом из разных сессиий. Т.к. _примерно_ сессия хибера равна сессии любого пользователя.


Они открываются и закрываются автоматом в функциях DAO. Функции возвращают загруженные объекты.

Лучше быть здоровым и богатым, чем бедным и больным :). Поскольку у меня используется способ DAO, то у меня получается не такая схема.

BlazkowiczПо-моему merge() надо вызвать для объектов, которые получены в других сессиях, перед тем как их использовать в текущей.
Ну, и кэш второго уровня, стоит попробовать включить, чтобы свести к минимуму обращения к базе.


Почему-то во всех примерах, используется cache.provider_class=hibernate.cache.NoCacheProvider :(.
Где-то читал, что кеширования для WEb плохо, особенно, если не только один Web использует данные. У меня, например, standalone приложение производит обработку данных, после того как их поправит пользователь.
...
Рейтинг: 0 / 0
I hate hibernate (NonUniqueObjectException, merge & cache)
    #38207203
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Шаров СергейПочему-то во всех примерах, используется cache.provider_class=hibernate.cache.NoCacheProvider :(.

Каких ещё примерах?

Шаров СергейГде-то читал, что кеширования для WEb плохо

:D

Шаров Сергей, особенно, если не только один Web использует данные.

Есть сложности с тем если кто-то мимо хибернейта обновляет данные.

Шаров СергейУ меня, например, standalone приложение производит обработку данных, после того как их поправит пользователь.
И оно на прямую работает с базой?
...
Рейтинг: 0 / 0
I hate hibernate (NonUniqueObjectException, merge & cache)
    #38207204
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Шаров СергейОни открываются и закрываются автоматом в функциях DAO
тогда только merge т.к. объект деаттачится при закрытии сессии (Хибер перестаёт им управлять).
А хибер различает разные объекты поадресу в памяти. а не по Id как СУБД.
...
Рейтинг: 0 / 0
I hate hibernate (NonUniqueObjectException, merge & cache)
    #38207216
Шаров Сергей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123,

Блин, ещё раз попробовал merge и о чудо, ошибка не сгенерилась :).
Странно, что cache.provider_class=hibernate.cache.NoCacheProvider выключено, а объекты всё равно собираются.
Ну и хорошо.

Спасибо.
...
Рейтинг: 0 / 0
I hate hibernate (NonUniqueObjectException, merge & cache)
    #38207239
Шаров Сергей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz,

1) Оно тоже работает через хибернате, но.... только вот JRE-то другое. Что-то я слабо верю, в то, что хибернате сможет закешироваться вместе из разных JRE. Именно из-за этих опасений, я боюсь, что хеширование мне противопоказано.

Чтобы не дёргать СУБД по пусту, я храню всё НСИ в одном объекте между разными сессиями (лениво). Получается сам закешировал что мне нужно. А то, чего много (не ленивые) использую отдельно.

2) Примеры - простые примеры настройки DAO & Hibernate (Web). До кеша ещё не дошёл. Хотя сегодня читал хорошую статью и понял что в некоторых случаях кеширование для ВЕБ это хорошо, только нужно найчиться управлять им.
Т.к. хеширование может сожрать память tomcat-а.
...
Рейтинг: 0 / 0
I hate hibernate (NonUniqueObjectException, merge & cache)
    #38207248
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
фейспальм
...
Рейтинг: 0 / 0
I hate hibernate (NonUniqueObjectException, merge & cache)
    #38207250
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1 апреля чтоли
...
Рейтинг: 0 / 0
I hate hibernate (NonUniqueObjectException, merge & cache)
    #38207252
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Шаров Сергейя храню всё НСИ в одном объекте
такой маленький проект?
НСИ можно сказать - справочники.
...
Рейтинг: 0 / 0
I hate hibernate (NonUniqueObjectException, merge & cache)
    #38207268
Лагман
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я бы рекомендовал перейти на biebernate, гораздо лучше возможности управления транзакциями
...
Рейтинг: 0 / 0
I hate hibernate (NonUniqueObjectException, merge & cache)
    #38207272
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Шаров Сергей1) Оно тоже работает через хибернате, но.... только вот JRE-то другое. Что-то я слабо верю, в то, что хибернате сможет закешироваться вместе из разных JRE. Именно из-за этих опасений, я боюсь, что хеширование мне противопоказано.

Существую распределенные кеши если что. Но в вашем случае просто стоило не давать клиенту ходить в базу мимо сервера.

Шаров СергейЧтобы не дёргать СУБД по пусту, я храню всё НСИ в одном объекте между разными сессиями (лениво). Получается сам закешировал что мне нужно. А то, чего много (не ленивые) использую отдельно.
Hibernate по уровню сложности догдал EJB и скоро перегонит. Стоит потратить немного больше времени на чтение мануала.

Шаров Сергей2)Т.к. хеширование может сожрать память tomcat-а.
Кеш занимает память. Это по-моему логично. Вы не находите?
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / I hate hibernate (NonUniqueObjectException, merge & cache)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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