|
|
|
I hate hibernate (NonUniqueObjectException, merge & cache)
|
|||
|---|---|---|---|
|
#18+
Проблема следующая: В 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, но уже забыл где :(. Самому следить за тем, чтобы использовались одни и те же объекты для ссылок возможно, но слишком "дорого" :(. Даже не знаю как быть с данной проблемой. Также я понимаю Хибернате. Он не знает, что я использую только ссылку(без редакирования), также он не знает, были ли объекты изменены или вообще созданы заново и какой из объектов актуален для записи :(. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.04.2013, 13:37:54 |
|
||
|
I hate hibernate (NonUniqueObjectException, merge & cache)
|
|||
|---|---|---|---|
|
#18+
Шаров Сергей, сессии хибера надо закрывать. Стараться без причины не работать с одним объектом из разных сессиий. Т.к. _примерно_ сессия хибера равна сессии любого пользователя. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.04.2013, 14:14:37 |
|
||
|
I hate hibernate (NonUniqueObjectException, merge & cache)
|
|||
|---|---|---|---|
|
#18+
По-моему merge() надо вызвать для объектов, которые получены в других сессиях, перед тем как их использовать в текущей. Ну, и кэш второго уровня, стоит попробовать включить, чтобы свести к минимуму обращения к базе. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.04.2013, 14:20:31 |
|
||
|
I hate hibernate (NonUniqueObjectException, merge & cache)
|
|||
|---|---|---|---|
|
#18+
Шаров СергейПроблема следующая: В WEB сессии хранится объект (facade) у которого есть два свойства, которые должны ссылаться на один объект. То есть 1) при заполнении первого свойства, я сделал запрос через DAO и получил объект (ИД=5) в одной хибер. сессии, 2) при заполнении второго свойства, я сделал запрос через DAO и получил объект (ИД=5) в _другой_ хибер. сессии, Зачем тогда 2) если "которые должны ссылаться на один объект"? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.04.2013, 14:30:46 |
|
||
|
I hate hibernate (NonUniqueObjectException, merge & cache)
|
|||
|---|---|---|---|
|
#18+
Petro123сессии хибера надо закрывать. Стараться без причины не работать с одним объектом из разных сессиий. Т.к. _примерно_ сессия хибера равна сессии любого пользователя. Они открываются и закрываются автоматом в функциях DAO. Функции возвращают загруженные объекты. Лучше быть здоровым и богатым, чем бедным и больным :). Поскольку у меня используется способ DAO, то у меня получается не такая схема. BlazkowiczПо-моему merge() надо вызвать для объектов, которые получены в других сессиях, перед тем как их использовать в текущей. Ну, и кэш второго уровня, стоит попробовать включить, чтобы свести к минимуму обращения к базе. Почему-то во всех примерах, используется cache.provider_class=hibernate.cache.NoCacheProvider :(. Где-то читал, что кеширования для WEb плохо, особенно, если не только один Web использует данные. У меня, например, standalone приложение производит обработку данных, после того как их поправит пользователь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.04.2013, 14:41:43 |
|
||
|
I hate hibernate (NonUniqueObjectException, merge & cache)
|
|||
|---|---|---|---|
|
#18+
Шаров СергейПочему-то во всех примерах, используется cache.provider_class=hibernate.cache.NoCacheProvider :(. Каких ещё примерах? Шаров СергейГде-то читал, что кеширования для WEb плохо :D Шаров Сергей, особенно, если не только один Web использует данные. Есть сложности с тем если кто-то мимо хибернейта обновляет данные. Шаров СергейУ меня, например, standalone приложение производит обработку данных, после того как их поправит пользователь. И оно на прямую работает с базой? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.04.2013, 14:51:52 |
|
||
|
I hate hibernate (NonUniqueObjectException, merge & cache)
|
|||
|---|---|---|---|
|
#18+
Шаров СергейОни открываются и закрываются автоматом в функциях DAO тогда только merge т.к. объект деаттачится при закрытии сессии (Хибер перестаёт им управлять). А хибер различает разные объекты поадресу в памяти. а не по Id как СУБД. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.04.2013, 14:51:55 |
|
||
|
I hate hibernate (NonUniqueObjectException, merge & cache)
|
|||
|---|---|---|---|
|
#18+
Petro123, Блин, ещё раз попробовал merge и о чудо, ошибка не сгенерилась :). Странно, что cache.provider_class=hibernate.cache.NoCacheProvider выключено, а объекты всё равно собираются. Ну и хорошо. Спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.04.2013, 14:57:56 |
|
||
|
I hate hibernate (NonUniqueObjectException, merge & cache)
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, 1) Оно тоже работает через хибернате, но.... только вот JRE-то другое. Что-то я слабо верю, в то, что хибернате сможет закешироваться вместе из разных JRE. Именно из-за этих опасений, я боюсь, что хеширование мне противопоказано. Чтобы не дёргать СУБД по пусту, я храню всё НСИ в одном объекте между разными сессиями (лениво). Получается сам закешировал что мне нужно. А то, чего много (не ленивые) использую отдельно. 2) Примеры - простые примеры настройки DAO & Hibernate (Web). До кеша ещё не дошёл. Хотя сегодня читал хорошую статью и понял что в некоторых случаях кеширование для ВЕБ это хорошо, только нужно найчиться управлять им. Т.к. хеширование может сожрать память tomcat-а. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.04.2013, 15:06:14 |
|
||
|
I hate hibernate (NonUniqueObjectException, merge & cache)
|
|||
|---|---|---|---|
|
#18+
фейспальм ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.04.2013, 15:11:22 |
|
||
|
I hate hibernate (NonUniqueObjectException, merge & cache)
|
|||
|---|---|---|---|
|
#18+
1 апреля чтоли ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.04.2013, 15:12:29 |
|
||
|
I hate hibernate (NonUniqueObjectException, merge & cache)
|
|||
|---|---|---|---|
|
#18+
Шаров Сергейя храню всё НСИ в одном объекте такой маленький проект? НСИ можно сказать - справочники. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.04.2013, 15:12:32 |
|
||
|
I hate hibernate (NonUniqueObjectException, merge & cache)
|
|||
|---|---|---|---|
|
#18+
я бы рекомендовал перейти на biebernate, гораздо лучше возможности управления транзакциями ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.04.2013, 15:18:29 |
|
||
|
I hate hibernate (NonUniqueObjectException, merge & cache)
|
|||
|---|---|---|---|
|
#18+
Шаров Сергей1) Оно тоже работает через хибернате, но.... только вот JRE-то другое. Что-то я слабо верю, в то, что хибернате сможет закешироваться вместе из разных JRE. Именно из-за этих опасений, я боюсь, что хеширование мне противопоказано. Существую распределенные кеши если что. Но в вашем случае просто стоило не давать клиенту ходить в базу мимо сервера. Шаров СергейЧтобы не дёргать СУБД по пусту, я храню всё НСИ в одном объекте между разными сессиями (лениво). Получается сам закешировал что мне нужно. А то, чего много (не ленивые) использую отдельно. Hibernate по уровню сложности догдал EJB и скоро перегонит. Стоит потратить немного больше времени на чтение мануала. Шаров Сергей2)Т.к. хеширование может сожрать память tomcat-а. Кеш занимает память. Это по-моему логично. Вы не находите? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.04.2013, 15:19:27 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=38207250&tid=2129643]: |
0ms |
get settings: |
16ms |
get forum list: |
18ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
46ms |
get topic data: |
14ms |
get forum data: |
3ms |
get page messages: |
71ms |
get tp. blocked users: |
2ms |
| others: | 287ms |
| total: | 463ms |

| 0 / 0 |
