2011-12-06 10 views
5

Tôi đã phát hiện ra một trường hợp lạ khi cố gắng sao chép một khóa bộ nhớ cache cấp 2 Hibernate khi cập nhật đối tượng.Sự cố sao chép Hibernate - phiên thực sự có cần phải được sao chép không?

Cache cấu trúc quan trọng là như thế này:

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 

Vấn đề tôi có thể thấy ở đây là cacheKey.type.typeScope có một tham chiếu đến địa phương o.h.i.SessionFactoryImpl mà được nhân rộng hơn. Nên typeScope (hoặc một trong những tổ tiên của nó) không được khai báo là tạm thời?

Nhìn vào lớp o.h.t.ComponentType Tôi có thể thấy rằng thuộc tính typeScope không được sử dụng ở tất cả trong lớp này nhưng chỉ được đặt trong hàm tạo và được giữ. Đây có phải là lỗi Hibernate không?

LƯU Ý: o.h.t.ComponentType được sử dụng khi thực thể có khóa tổng hợp và sử dụng đối tượng số nhận dạng đặc biệt cho nó.

Chúng tôi sử dụng Hibernate v3.6.7 và Ehcache v2.4.4. Điều này cũng đã được đăng trên Hibernate Users forum.

EDIT: Tôi đã mở HHH-6880, mà không có nhiều thành công cho đến nay.

Tôi cũng đã đăng một thông báo tương tự cho Ehcache users mailing list và Alex @ Terracotta đề xuất đây là vấn đề chính hãng, có thể được HHH-5182 giới thiệu trong phiên bản 3.6 và cũng ảnh hưởng đến những thứ như việc tuần tự hóa Ehcache. Đây là liên kết đến hibernate-dev thread.

Trả lời

0

Có vẻ như nhóm Hibernate cảm thấy điều này đã được giải quyết trong 4.0.1, bằng cách sửa chữa HHH-6822.