Odkryłem dziwny przypadek podczas próby replikowania klucza pamięci podręcznej hibernacji 2nd poziomu podczas aktualizacji obiektu.Problemy z replikacją w hibernacji - czy sesja naprawdę musi zostać zreplikowana?
Pamięć podręczna konstrukcja kluczem jest tak:
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
Problem widzę tutaj jest to, że cacheKey.type.typeScope
ma odniesienie do lokalnej o.h.i.SessionFactoryImpl
który dostaje replikowane. Czy typeScope
(lub jeden z jego przodków) nie powinien być zadeklarowany jako przejściowy?
Patrząc na klasę o.h.t.ComponentType
widzę, że atrybut typeScope
nie jest w ogóle używany w tej klasie, ale tylko ustawiony w konstruktorze i przechowywany w. Czy jest to błąd Hibernacji?
UWAGA: o.h.t.ComponentType
jest używany, gdy obiekt ma klucz złożony i używa do niego specjalnego obiektu identyfikatora.
Używamy Hibernate v3.6.7 i Ehcache v2.4.4. Zostało to również opublikowane na Hibernate Users forum.
EDYTOWANIE: Otworzyłem HHH-6880, bez większego sukcesu do tej pory.
Wysłałem również podobną wiadomość do Ehcache users mailing list, a Alex @ Terracotta zasugerował, że był to autentyczny problem, prawdopodobnie wprowadzony przez HHH-5182 w wersji 3.6, a także wpływający na takie rzeczy jak serializacja Ehcache na dysk. Oto link do hibernate-dev thread.