InvalidClassException с Hibernate 3.6.0 и JPA 2.0 - PullRequest
0 голосов
/ 06 ноября 2010

Я только начал использовать 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 Ответ

2 голосов
/ 06 ноября 2010

Это исключение говорит о том, что объект класса BaseEntity был сохранен в базе данных в сериализованной форме и не может быть десериализован, так как класс был изменен.

Хранение объектов в сериализованной форме - это резервная стратегия, используемая Hibernate, когда она не может выяснить, как должен храниться объект (т. Е. Он не настроен). Обычно это не желаемое поведение.

Возможно, в вашем случае это означает, что одно из отношений между сущностями (UserGroup_.entries или UserGroupEntry_.user) настроено неправильно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...