2012-10-15 87 views
3

請幫助我的應用程序工作正常,直到今天。今天我得到了「無法反序列化」的例外。 java.io.EOFException的。有時我能夠獲取數據。問題是間歇性的。這裏可能是什麼問題?無法反序列化org.hibernate.type.SerializationException

@Entity 
@Cacheable 
@Cache(usage = CacheConcurrencyStrategy.TRANSACTIONAL) 
public class Filter { 
private int id; 
    private String name; 
    private User user; 
    private NameValue[][] filterMap; 


    @Id 
    @GeneratedValue(strategy=GenerationType.SEQUENCE) 
    public int getId() { 
     return id; 
    } 
    public void setId(int id) { 
     this.id = id; 
    } 

    public String getName() { 
     return name; 
    } 
    public void setName(String name) { 
     this.name = name; 
    } 

    @ManyToOne(
      targetEntity = User.class 
    ) 
    @JoinColumn(name="userName") 
    public User getUser() { 
     return user; 
    } 
    public void setUser(User user) { 
     this.user = user; 
    } 
    @Lob 
     public NameValue[][] getFilterMap() { 
     return filterMap; 
    } 
    public void setFilterMap(NameValue[][] filterMap) { 
     this.filterMap = filterMap; 
    } 
+0

你能提供更多細節嗎?可能堆棧跟蹤 – Anshu

回答

4

這可能是因爲對象可以被緩存,並且您必須配置緩存溢出到磁盤(或任何其他存儲)。

當您嘗試序列化或反序列化類時出現的問題,以及一個或多個以下的發生:

  1. 類或任何字段(如用戶)都沒有實現Serializable
  2. 自上次部署以來,該類發生了更改,並且java生成了一個新的serialVersionUID。當java嘗試加載之前位於磁盤緩存中的對象時,serialVersionUID不匹配並引發錯誤。
  3. 您使用的是不同的JVM產生不同的serialVersionUID
+0

嗨,奧古斯都!非常感謝您的回覆。其實我也使用ha-jdbc。而我們生產的使我們的二級緩存真正 <屬性名= 「hibernate.cache.region.factory_class」> org.hibernate.cache.infinispan.InfinispanRegionFactory <屬性名稱=「cache.use_query_cache」> false我不完全理解緩存使用情況。但也許我會嘗試禁用它。 – Jess

+0

嗨,傑西,試着製作一些可以解決問題的「可序列化」類的Hiberate類。 – Augusto

1

您必須實現對Hibernate實體Serializable接口,並保留默認private static final long serialVersionUID = 1L。它的價值可以是任何東西,不一定只有1L。

如:

public class Med implements Serializable { 
    private static final long serialVersionUID = 1L; 
} 
0

這個問題,我面對,並得到解決, 對於我來說,解決DB側插休眠行的休息後,手動插入一些行,以便在檢索時這個錯誤提出解決方法很簡單刪除數據庫數據全部或手動輸入的行新鮮插入通過休眠後,然後檢索數據(標準)這一次沒有例外。 - Mallikarjun Chinta

相關問題