Jess
Jess

Reputation: 131

Could not deserialize org.hibernate.type.SerializationException

Please help- My application was working fine until today. Today I got the exception "could not deserialize". java.io.eofException. And sometimes I was able to get the data. The problem was intermittent. What could be the issue here?

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

Upvotes: 4

Views: 27596

Answers (3)

user8495084
user8495084

Reputation: 21

This issue i faced and got solution , for me it's resolved db side manually inserted some rows after rest of the rows inserted Hibernate so while retrieving time this error raised solution is simple remove db data entire or manually entered rows freshly insert through hibernate after then retrieve data(criteria) this time no exception. - Mallikarjun Chinta

Upvotes: 0

user4772709
user4772709

Reputation:

You have to implement Serializable interface for Hibernate entity and keep default private static final long serialVersionUID = 1L. Its value can be anything, not necessarily 1L only.

eg:

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

Upvotes: 1

Augusto
Augusto

Reputation: 29827

This probably happens because the object can be cached, and you must have configured the cache to overflow to disk (or any other storage).

The problem happens when you try to serialize or deserialize the class, and one or more of the following happen:

  1. The class or any of the fields (such as User) don't implement Serializable
  2. The class has changed since the last deploy and java generates a new serialVersionUID. When java tries to load an object that was previously on the disk cache, the serialVersionUID don't match and the error is thrown.
  3. You're using a different JVM which generates a different serialVersionUID

Upvotes: 6

Related Questions