2011-12-06 12 views
5

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.

Odpowiedz

0

Wygląda na to, że zespół Hibernate uważa, że ​​został rozwiązany w wersji 4.0.1, naprawiając HHH-6822.