我正在使用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
}
LOGS说:
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
答案 0 :(得分:6)
我建议仅在字段或getter上设置注释。我更喜欢田地,但这只是我的口味。
请参阅The Curious case of Field and Property Access in Hibernate:
因此,只将注释放在字段上或仅放在getter(属性)上。混合它们而不使用@Access会导致异常行为。
然后,如果序列化是您的应用程序的一部分,我建议使用工具生成更好的serialVersionUID。
答案 1 :(得分:5)
您可以简单地在joda时间的任何字段上方注释:
@Temporal(TemporalType.DATE)
@Type(type = "org.jadira.usertype.dateandtime.joda.PersistentLocalDate")
答案 2 :(得分:4)
我遇到了同样的错误,但最后,我看到关系中没有错误。如果你认为关系中没有错误那么
检查您的导入可能导致其他字段导入错误。
例如在我的代码中
我自动导入import java.security.Timestamp
当我更改错误导入以导入java.sql.Timestamp
时;错误消失了。
答案 3 :(得分:2)
也许这是一个微不足道的评论,但如果您使用Eclipse JBoss Hibernate插件等工具生成您的Entity类,请注意它将varchar
字段的类型设置为Serializable
而不是字符串。
在运行时,您将获得org.hibernate.type.SerializationException: could not deserialize
我为这么愚蠢的细节丢了很多时间。
答案 4 :(得分:0)
当我拥有类型为Number
而不是Integer
的持久类属性时,我遇到了这个问题