Hibernate 3.6.0和JPA 2.0的InvalidClassException

时间:2010-11-05 21:37:42

标签: java hibernate jpa

我刚刚开始使用hibernate 3.6.0和JPA 2.0,但我遇到了一些麻烦。

我在某些查询中遇到InvalidClassException。顺便说一句,我正在使用带有hibernate-jpamodelgen的元模型。

即。下面一个运行良好:

CriteriaBuilder cb = getCriteriaBuilder();
CriteriaQuery<UserEntity> cq = getCriteriaQuery(cb);
cq.where(cb.equal(cq.from(UserEntity.class).get(UserEntity_.username), username));

但是这个我遇到了麻烦:

CriteriaBuilder cb = getCriteriaBuilder();
CriteriaQuery<UserGroup> cq = getCriteriaQuery(cb);

cq.where(cb.equal(cq.from(UserGroup.class).join(UserGroup_.entries).join(UserGroupEntry_.user).get(UserEntity_.id), user.getId()));

我得到如下的异常。 查询中使用的所有类都实现了Serializable。

我有点迷失在这里,所以任何帮助都会受到赞赏。

java.io.InvalidClassException: com.ptm.model.BaseEntity; local class incompatible: stream classdesc serialVersionUID = 7662749495871325837, local class serialVersionUID = 8176072949097236524
     at java.io.ObjectStreamClass.initNonProxy(ObjectStreamClass.java:579)
     at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1600)
     at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1513)
     at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1600)
     at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1513)
     at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1749)
     at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1346)
     at java.io.ObjectInputStream.readObject(ObjectInputStream.java:368)
     at org.hibernate.util.SerializationHelper.doDeserialize(SerializationHelper.java:244)
     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 org.hibernate.type.descriptor.java.SerializableTypeDescriptor.wrap(SerializableTypeDescriptor.java:39)
     at org.hibernate.type.descriptor.sql.VarbinaryTypeDescriptor$2.doExtract(VarbinaryTypeDescriptor.java:62)
     at org.hibernate.type.descriptor.sql.BasicExtractor.extract(BasicExtractor.java:64)
     at org.hibernate.type.AbstractStandardBasicType.nullSafeGet(AbstractStandardBasicType.java:253)
     at org.hibernate.type.AbstractStandardBasicType.nullSafeGet(AbstractStandardBasicType.java:249)

1 个答案:

答案 0 :(得分:2)

此异常表示类BaseEntity的对象以序列化形式存储在数据库中,因为类已更改,因此无法反序列化。

以序列化形式存储对象是Hibernate使用的后备策略,当它无法弄清楚对象应该如何存储时(即它没有配置)。通常这不是一个理想的行为。

也许在您的情况下,这意味着实体(UserGroup_.entriesUserGroupEntry_.user)之间的关系之一配置不正确。