2015-07-11 55 views
1

我在使用hibernate的測試java項目上得到標題錯誤。 類似的帖子沒有幫助我解決這個問題。無法擺脫org.hibernate.type.SerializationException:無法反序列化

的關心類是:

package org.entities; 

// default package 
// Generated Jul 11, 2015 12:18:25 PM by Hibernate Tools 4.0.0 

import java.io.Serializable; 

import javax.persistence.Column; 
import javax.persistence.Entity; 
import javax.persistence.Id; 
import javax.persistence.Table; 

/** 
* Rats generated by hbm2java 
*/ 

@Entity 
@Table(name = "RATS") 
public class Rats implements java.io.Serializable { 

    /** 
    * 
    */ 
    private static final long serialVersionUID = 1L; 
    private int id; 
    private Serializable name; 
    private int age; 

    public Rats() { 
    } 

    public Rats(int id, Serializable name, int age) { 
     this.id = id; 
     this.name = name; 
     this.age = age; 
    } 

    @Id 
    @Column(name = "ID", unique = true, nullable = false) 
    public int getId() { 
     return this.id; 
    } 

    public void setId(int id) { 
     this.id = id; 
    } 

    @Column(name = "Name", nullable = false) 
    public Serializable getName() { 
     return this.name; 
    } 

    public void setName(Serializable name) { 
     this.name = name; 
    } 

    @Column(name = "Age", nullable = false) 
    public int getAge() { 
     return this.age; 
    } 

    public void setAge(int age) { 
     this.age = age; 
    } 


    @Override 
    public String toString() { 
     return "My name is " + name + ", anad I am " + age + " years old."; 
    } 


} 

此文件由蝕自動生成(除了toString方法)。 如果我在列出的超類中將「serializable」替換爲「String」,它將起作用。但我相信你們的專家會找到正確的理由,這樣我就不需要這樣做了。

如果相關,則「名稱」字段對應於DB中的nchar(50)。

THX提前

+0

那麼,爲什麼你不希望它是一個'String'?另外,爲什麼字段「瞬態」?在我看來,你應該擺脫那個Eclipse插件。 –

+0

我實際上添加了「瞬態」作爲測試。我在添加它之前和之後都有例外。我會將它從原始帖子中刪除以避免混淆。 –

回答

0

你必須聲明變量「名」作爲私人短暫序列化的名稱;在你的數據庫表中,'Name'列的類型是nc​​har。這是一種類型不匹配,因爲Serializable是一個接口。因爲這個hibernate引發了一個異常。

改變列型到BLOB

而不是定義名稱爲Serializable名;用MyClass名稱等其他方式定義它; MyClass也應該實現Serializable接口。

Refer this

this one also