Проблемы репликации Hibernate - действительно ли сеанс должен быть реплицирован? - PullRequest
5 голосов
/ 06 декабря 2011

Я обнаружил странный случай, когда пытался реплицировать ключ кэша 2-го уровня Hibernate при обновлении объекта.

Структура ключа кэша выглядит следующим образом:

cacheKey = {org.hibernate.cache.CacheKey}
|- key = {my.own.serializable.class}
|- type = {org.hibernate.type.ComponentType}
| |- typeScope = {org.hibernate.type.TypeFactory$TypeScopeImpl}
| | |- factory = {org.hibernate.impl.SessionFactoryImpl}
| |- propertyNames = {...}
| |- propertyTypes = {...}
| |- propertyNullability = {...}
| |- propertySpan = 2
| |- cascade = {...}
| |- joinedFetch = {...}
| |- isKey = true
| |- tuplizerMapping = {...}
|- entityOrRoleName = {java.lang.String} "my.Entity"
|- entityMode = {org.hibernate.EntityMode}
|- hashCode = 588688

Проблема, которую я вижу здесь, состоит в том, что cacheKey.type.typeScope имеет ссылку на локальный o.h.i.SessionFactoryImpl, который реплицируется. Разве typeScope (или один из его предков) не должен быть объявлен переходным?

Глядя на класс o.h.t.ComponentType, я вижу, что атрибут typeScope вообще не используется в этом классе, а только устанавливается в конструкторе и сохраняется в нем. Это ошибка Hibernate?

ПРИМЕЧАНИЕ: o.h.t.ComponentType используется, когда у сущности есть составной ключ и для него используется специальный идентификатор объекта.

Мы используем Hibernate v3.6.7 и Ehcache v2.4.4. Это также было размещено на форуме пользователей Hibernate .

EDIT: Я открыл ЧЧХ-6880 , но пока без особого успеха.

Я также опубликовал аналогичное сообщение в списке рассылки пользователей Ehcache , и Алекс @ Терракота предположил, что это подлинная проблема, вероятно, появившаяся в HHH-5182 в версии 3.6 и также затрагивающая такие вещи, как сериализация Ehcache диск. Вот ссылка на тему hibernate-dev .

1 Ответ

0 голосов
/ 27 марта 2013

Похоже, что команда Hibernate чувствует, что это было решено в 4.0.1, исправив HHH-6822 .

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