2010-11-05 5 views
0

Je viens de commencer à utiliser Hibernate 3.6.0 et JPA 2.0 et j'ai quelques problèmes.InvalidClassException avec Hibernate 3.6.0 et JPA 2.0

Je reçois InvalidClassException sur certaines requêtes. En passant, j'utilise le métamodèle avec hibernate-jpamodelgen.

I.e. on court en dessous de fin:

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

mais avec ce que je vais avoir du mal:

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())); 

Je reçois exception comme ci-dessous. Toutes les classes utilisées dans les requêtes implémentent Serializable.

Je suis un peu perdu ici donc toute aide serait appréciée.

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) 

Répondre

2

Cette exception dit qu'un objet de classe BaseEntity a été stocké dans la base de données sous forme sérialisés et ne peut pas être désérialisée parce que la classe ont été modifiés.

Le stockage d'objets sous forme sérialisée est une stratégie de repli utilisée par Hibernate lorsqu'elle ne peut pas comprendre comment l'objet doit être stocké (c'est-à-dire qu'il n'est pas configuré). Habituellement ce n'est pas un comportement désiré.

Peut-être que dans votre cas, cela signifie que l'une des relations entre entités (UserGroup_.entries ou UserGroupEntry_.user) est mal configurée.

+0

Il restait des anciennes données. Les données qui ont été créées lorsque j'ai utilisé JPA 1.0 et une version antérieure de Hibernate. Lorsque j'ai supprimé ces données de la base de données, tout va bien. –

Questions connexes