Shinigami
Shinigami

Reputation: 1055

org.hibernate.type.SerializationException: could not deserialize

I'm using two tables by Hibernate and I dont understand why for particular query I have this problem. I hope someone recognizes the problem.

I have a table user

@Entity
@Table(name="user")
public class User implements Serializable {
private static final long serialVersionUID = 1L;
private Long idUser;
private Area area;

//...other get and setter

@OneToOne(fetch=FetchType.EAGER)
@JoinColumn(name="idarea")
public Area getArea() {
return area;
}
}

and a table area

@Entity
@Table(name = "area")
public class Area implements Serializable {
private static final long serialVersionUID = 1L;

@Id @GeneratedValue(strategy=GenerationType.AUTO)
@Column(name="idarea")
private Long idArea;

@Column(name="area_name")
private String areaName;

@Column(name="time_start")
private LocalTime timeStart;

//...other get and setter

}

LOGS says:

15:27:28,140  INFO DefaultLoadEventListener:160 - Error performing load command
org.hibernate.type.SerializationException: could not deserialize
at org.hibernate.util.SerializationHelper.doDeserialize(SerializationHelper.java:262)
at org.hibernate.util.SerializationHelper.deserialize(SerializationHelper.java:306)
at org.hibernate.type.descriptor.java.SerializableTypeDescriptor.fromBytes(SerializableTypeDescriptor.java:130)
at org.hibernate.type.descriptor.java.SerializableTypeDescriptor.wrap(SerializableTypeDescriptor.java:116)
at 
....//other lines
org.springframework.orm.hibernate3.HibernateSystemException: could not deserialize; nested exception is org.hibernate.type.SerializationException: could not deserialize

Upvotes: 11

Views: 76214

Answers (5)

Sam Barnum
Sam Barnum

Reputation: 10714

I ran into this when I had a persisted class attribute of type Number instead of Integer

Upvotes: 0

i.karayel
i.karayel

Reputation: 4875

I met with the same mistake but finally, I saw there were no errors in the relation. if you believe there is no error in the relation then check your imports there may wrong import for other fields. for example in my code import java.security.Timestamp imported by idea automatically When I changed wrong import to import java.sql.Timestamp; the error was gone.

Upvotes: 5

baronKarza
baronKarza

Reputation: 523

Maybe it is a trivial remark, but if you generated your Entity classes with tools like Eclipse JBoss Hibernate plugin, pay attention to the fact that it sets the type of varchar fields as Serializable instead of String.

At runtime you'll get org.hibernate.type.SerializationException: could not deserialize

I lost a lot of time for such a stupid detail.

Upvotes: 1

Dejell
Dejell

Reputation: 14317

You can simply annotate above any field of joda time:

   @Temporal(TemporalType.DATE)
   @Type(type = "org.jadira.usertype.dateandtime.joda.PersistentLocalDate")

Upvotes: 8

Christian
Christian

Reputation: 4084

I would recommend to set the annotations only on the fields or the getters. I prefer the fields, but thats just my taste.

See The Curious case of Field and Property Access in Hibernate:

Thus either place the annotations on the fields only or on the getters(properties) only. Mixing them and not using @Access will cause abnormal behaviour.

Then if serialization is part of your application I would recommend to generate better serialVersionUID with a tool.

Upvotes: 7

Related Questions