3

请帮助-我的应用程序运行良好,直到今天。今天我得到了“无法反序列化”的异常。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;
    }
4

3 回答 3

5

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

当您尝试对类进行序列化或反序列化时会出现问题,并且会发生以下一种或多种情况:

  1. 类或任何字段(例如 User)不实现 Serializable
  2. 自上次部署以来,该类已更改,java 生成一个新的 serialVersionUID。当 java 尝试加载以前在磁盘缓存上的对象时,serialVersionUID 不匹配并引发错误。
  3. 您正在使用不同的 JVM,它会生成不同的serialVersionUID
于 2012-10-15T17:58:55.477 回答
1

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

例如:

public class Med implements Serializable {
   private static final long serialVersionUID = 1L;
}
于 2016-03-05T11:30:18.307 回答
0

这个问题我遇到并得到了解决方案,对我来说,它已经解决了 db 端在插入 Hibernate 的其余行之后手动插入了一些行,所以在检索时间时,这个错误引发的解决方案很简单,删除整个 db 数据或手动输入的行,然后通过 hibernate 重新插入然后检索data(criteria) 这次也不例外。- Mallikarjun Chinta

于 2017-07-28T11:33:16.790 回答