ошибка области действия спящего режима - PullRequest
0 голосов
/ 29 декабря 2011

Я работаю над веб-приложением Grails

Приложение работает в очень медленной сети, и к нему обращаются старые и медленные клиентские ПК с IE 6. Соединение с базой данных очень медленное, и база данных перегружена. Поэтому минимизация вызовов БД и данных, передаваемых туда и обратно, является приоритетом

Я знаю, что использование области видимости не является наилучшей практикой. В этом случае я думал, что это будет лучше. Принимая во внимание, что все мои страницы требуют одинакового набора объектов, и это приведет к многократному извлечению их за

Итак, я поместил свой объект в область действия сеанса session.obj = obj

Отлично работает с одной проблемой Поскольку система работает очень медленно, возможно несколько кликов по ссылке на веб-страницу (контроллер / действие).

Когда это происходит, я получаю сообщение об ошибке в некоторых случаях org.hibernate.HibernateException: недопустимая попытка связать коллекцию с двумя открытыми сеансами

ошибка происходит с этим кодом

if (!obj?.isAttached()) {
   obj?.attach()
}

мне нужно прикрепить объект обратно в сеанс гибернации, чтобы я мог лениво загружать связанные объекты я не хочу стремиться получить (вероятно, решение) Мне кажется, что ошибка является причиной, когда объект присоединяется более одного раза. условие, кажется, не блокирует проблему. Это состояние гонки?

Мне просто хотелось бы узнать, есть ли у кого-нибудь решение этой проблемы или узнать причину

спасибо

1 Ответ

2 голосов
/ 29 декабря 2011

Если вы хотите избежать обходов базы данных и по-прежнему выполнять безопасный код, не прибегая к подключению / отключению объектов к / из сеанса Hibernate, вам следует использовать кэш второго уровня Hibernate. , Это позволило бы прозрачно кэшировать часто используемые объекты, их ассоциации и даже результат часто выполняемых запросов.

Кэширование также будет более эффективным и потреблять меньше памяти, поскольку оно будет использоваться всеми пользовательскими сеансами. И, конечно, это было бы безопаснее, потому что у вас никогда не будет устаревших объектов в сеансе HTTP.

Определенно путь, ИМО.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...