11

我正在使用 Hibernate 的两个表,但我不明白为什么对于特定查询我有这个问题。我希望有人认识到这个问题。

我有一个表用户

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

和一个桌子区域

@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

}

日志 说:

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
4

5 回答 5

8

您可以简单地在 joda time 的任何字段上方进行注释:

   @Temporal(TemporalType.DATE)
   @Type(type = "org.jadira.usertype.dateandtime.joda.PersistentLocalDate")
于 2013-07-30T13:17:18.417 回答
7

我建议仅在字段或 getter 上设置注释。我更喜欢田野,但这只是我的口味。

请参阅Hibernate 中字段和属性访问的奇特案例

因此,要么只将注释放在字段上,要么只放在 getter(properties) 上。混合它们而不使用@Access 会导致异常行为。

然后,如果序列化是您的应用程序的一部分,我建议使用工具生成更好的 serialVersionUID。

于 2012-11-07T09:16:24.477 回答
5

我遇到了同样的错误,但最后,我看到关系中没有错误。如果您认为关系中没有错误,请检查您的导入,其他字段可能导入错误。例如在我的代码中 import java.security.Timestamp自动导入的想法当我将错误的导入更改为导入时java.sql.Timestamp;错误消失了。

于 2017-02-28T19:05:51.953 回答
2

也许这是一个微不足道的评论,但如果您使用 Eclipse JBoss Hibernate 插件等工具生成实体类,请注意它将varchar字段类型设置为Serializable而不是 String 的事实。

在运行时你会得到org.hibernate.type.SerializationException: could not deserialize

我为这样一个愚蠢的细节浪费了很多时间。

于 2016-12-01T15:55:50.983 回答
0

当我有一个持久的类型属性Number而不是Integer

于 2019-01-08T18:09:11.870 回答