He descubierto un caso extraño al intentar replicar una clave de caché de segundo nivel de Hibernate después de la actualización del objeto.Problemas de replicación de Hibernate: ¿la sesión realmente necesita ser replicada?
estructura clave El caché es así:
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
El problema que veo aquí es que cacheKey.type.typeScope
tiene una referencia a la o.h.i.SessionFactoryImpl
local que obtiene replicado terminado. ¿Debería declararse typeScope
(o uno de sus antepasados) como transitorio?
Al observar la clase o.h.t.ComponentType
, puedo ver que el atributo typeScope
no se utiliza en absoluto en esta clase, sino que solo se establece en el constructor y se conserva. ¿Es esto un error de Hibernate?
NOTA: o.h.t.ComponentType
se usa cuando la entidad tiene una clave compuesta y usa un objeto identificador especial para ella.
Usamos Hibernate v3.6.7 y Ehcache v2.4.4. Esto también se ha publicado en el Hibernate Users forum.
EDIT: Abrí HHH-6880, sin mucho éxito hasta ahora.
También he publicado un mensaje similar al Ehcache users mailing list y Alex @ Terracotta sugirió que este era un problema real, probablemente introducido por HHH-5182 en la versión 3.6 y que también afecta cosas como la serialización Ehcache en el disco. Aquí hay un enlace al hibernate-dev thread.