无法反序列化org.hibernate.type.SerializationException

时间:2012-10-15 17:50:46

标签: hibernate serialization

请帮助 - 我的申请工作正常至今。今天我得到了例外"无法反序列化"。 java.io.EOFException的。有时我能够获取数据。问题是间歇性的。这可能是什么问题?

@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;
    }

3 个答案:

答案 0 :(得分:4)

这可能是因为对象可以被缓存,并且您必须已将缓存配置为溢出到磁盘(或任何其他存储)。

当您尝试序列化或反序列化该类时会发生此问题,并且会发生以下一种或多种情况:

  1. 类或任何字段(例如User)不实现Serializable
  2. 自上次部署以来,类已更改,java生成新的serialVersionUID。当java尝试加载以前在磁盘缓存上的对象时,serialVersionUID不匹配并抛出错误。
  3. 您使用的是另一个生成不同serialVersionUID
  4. 的JVM

答案 1 :(得分:1)

您必须为Hibernate实体实现Serializable接口并保持默认private static final long serialVersionUID = 1L。它的价值可以是任何东西,不一定只有1L。

例如:

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

答案 2 :(得分:0)

这个问题我面临并得到了解决方案, 对我来说,解析数据库端手动插入一些行后插入Hibernate的其余行,所以在检索时间这个错误引发解决方案是简单删除db数据整个或手动输入的行新填充通过hibernate之后检索数据(条件)这次也没有异常。 - Mallikarjun Chinta