休眠:无法反序列化 - 无效的流头 [英] Hibernate: Could not deserialize - invalid stream header
问题描述
有关我如何解决此错误的任何想法?我正在使用Hibernate的Spring JPA。
Any ideas as to how I could resolve this error? I am using Spring JPA with Hibernate. Necessary details below.
实体类1:
@Entity
@Table(name = "ways")
@TypeDef(name = "hstore", typeClass = HstoreUserType.class)
@Cacheable
public class Way {
/**
* Primary key for the row in table.
*/
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "id")
private Long id;
/**
* The ID to represent it across the system.
* Used for preserving historical information.
*/
@Column(name = "way_id")
private Long wayId;
/**
* The version of the way this Object represents.
*/
@Column(name = "version")
private Integer version;
/**
* The {@link User} that edited this version.
*/
@OneToOne
@PrimaryKeyJoinColumn(name = "user_id")
private User user;
/**
* Timestamp when this version of the Way was edited.
*/
@Column(name = "tstamp")
@Temporal(TemporalType.TIMESTAMP)
private Date timestamp;
/**
* The changeset that this version of the way belongs to.
*/
@Column(name = "changeset_id")
private Long changesetId;
/**
* All the tags this Way contains.
*/
@Type(type = "hstore")
@Column(name = "tags", columnDefinition = "hstore")
private Object2ObjectOpenHashMap<String, String> tags = new Object2ObjectOpenHashMap<String, String>();
@Column(name = "bbox")
private Geometry bbox;
@Column(name = "linestring")
private Geometry linestring;
@Column(name = "nodes")
private Long[] nodes;
// getters and setters
}
用户的实体类:
@Entity
@Table(name = "users")
@Cacheable
public class User {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "id")
private Long id;
@Column(name = "name", unique = true)
private String name;
// getters and setters
}
和stacktrace:
stacktrace相当庞大。
The stacktrace is quite huge. I am pasting the whole stacktrace below for reference and a quick TL;DR here:
javax.persistence.PersistenceException: org.hibernate.type.SerializationException: could not deserialize
Caused by: org.hibernate.type.SerializationException: could not deserialize
Caused by: java.io.StreamCorruptedException: invalid stream header: 30313033
完整的堆栈跟踪如下:
Full stacktrace follows:
javax.persistence.PersistenceException: org.hibernate.type.SerializationException: could not deserialize
at org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1361)
at org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1289)
at org.hibernate.ejb.QueryImpl.getResultList(QueryImpl.java:261)
at org.hibernate.ejb.criteria.CriteriaQueryCompiler$3.getResultList(CriteriaQueryCompiler.java:260)
at org.springframework.data.jpa.repository.support.SimpleJpaRepository.findAll(SimpleJpaRepository.java:250)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at org.springframework.data.repository.core.support.RepositoryFactorySupport$QueryExecutorMethodInterceptor.executeMethodOn(RepositoryFac
at org.springframework.data.repository.core.support.RepositoryFactorySupport$QueryExecutorMethodInterceptor.invoke(RepositoryFactorySuppo
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:110)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:155)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
at org.springframework.data.jpa.repository.support.LockModeRepositoryPostProcessor$LockModePopulatingMethodIntercceptor.invoke(LockModeReava:92)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:90)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:202)
at com.sun.proxy.$Proxy36.findAll(Unknown Source)
at com.osmrecommend.persistence.service.WayPersistenceServiceImpl.getAllWays(WayPersistenceServiceImpl.java:32)
at com.osmrecommend.dao.WayDAO.getAllWays(WayDAO.java:37)
at com.osmrecommend.cbf.TFIDFModelBuilder.get(TFIDFModelBuilder.java:90)
at com.osmrecommend.cbf.TFIDFModelBuilder.get(TFIDFModelBuilder.java:36)
at org.grouplens.grapht.util.MemoizingProvider.get(MemoizingProvider.java:59)
at org.grouplens.lenskit.inject.StaticInjector.instantiate(StaticInjector.java:130)
at org.grouplens.lenskit.inject.StaticInjector.apply(StaticInjector.java:137)
at org.grouplens.lenskit.inject.StaticInjector.apply(StaticInjector.java:47)
at org.grouplens.lenskit.eval.traintest.ComponentCache$NodeInstantiator.call(ComponentCache.java:166)
at com.google.common.cache.LocalCache$LocalManualCache$1.load(LocalCache.java:4792)
at com.google.common.cache.LocalCache$LoadingValueReference.loadFuture(LocalCache.java:3599)
at com.google.common.cache.LocalCache$Segment.loadSync(LocalCache.java:2379)
at com.google.common.cache.LocalCache$Segment.lockedGetOrLoad(LocalCache.java:2342)
at com.google.common.cache.LocalCache$Segment.get(LocalCache.java:2257)
at com.google.common.cache.LocalCache.get(LocalCache.java:4000)
at com.google.common.cache.LocalCache$LocalManualCache.get(LocalCache.java:4789)
at org.grouplens.lenskit.eval.traintest.ComponentCache$Instantiator.apply(ComponentCache.java:126)
at org.grouplens.lenskit.eval.traintest.ComponentCache$Instantiator.apply(ComponentCache.java:104)
at org.grouplens.lenskit.inject.RecommenderInstantiator$1.apply(RecommenderInstantiator.java:109)
at org.grouplens.lenskit.inject.RecommenderInstantiator$1.apply(RecommenderInstantiator.java:99)
at org.grouplens.lenskit.inject.RecommenderInstantiator.replaceShareableNodes(RecommenderInstantiator.java:188)
at org.grouplens.lenskit.inject.RecommenderInstantiator.instantiate(RecommenderInstantiator.java:99)
at org.grouplens.lenskit.eval.traintest.LenskitEvalJob.buildRecommender(LenskitEvalJob.java:74)
at org.grouplens.lenskit.eval.traintest.TrainTestJob.runEvaluation(TrainTestJob.java:117)
at org.grouplens.lenskit.eval.traintest.TrainTestJob.call(TrainTestJob.java:101)
at org.grouplens.lenskit.eval.traintest.JobGraph$JobNode.call(JobGraph.java:116)
at org.grouplens.lenskit.eval.traintest.JobGraph$JobNode.call(JobGraph.java:102)
at org.grouplens.lenskit.util.parallel.SequentialTaskGraphExecutor.execute(SequentialTaskGraphExecutor.java:37)
at org.grouplens.lenskit.eval.traintest.TrainTestEvalTask.runEvaluations(TrainTestEvalTask.java:468)
at org.grouplens.lenskit.eval.traintest.TrainTestEvalTask.perform(TrainTestEvalTask.java:398)
at org.grouplens.lenskit.eval.traintest.SimpleEvaluator.call(SimpleEvaluator.java:313)
at com.osmrecommend.app.OSMRecommendEval.main(OSMRecommendEval.java:94)
Caused by: org.hibernate.type.SerializationException: could not deserialize
at org.hibernate.internal.util.SerializationHelper.doDeserialize(SerializationHelper.java:262)
at org.hibernate.internal.util.SerializationHelper.deserialize(SerializationHelper.java:306)
at org.hibernate.type.descriptor.java.SerializableTypeDescriptor.fromBytes(SerializableTypeDescriptor.java:131)
at org.hibernate.type.descriptor.java.SerializableTypeDescriptor.wrap(SerializableTypeDescriptor.java:117)
at org.hibernate.type.descriptor.java.SerializableTypeDescriptor.wrap(SerializableTypeDescriptor.java:39)
at org.hibernate.type.descriptor.sql.VarbinaryTypeDescriptor$2.doExtract(VarbinaryTypeDescriptor.java:67)
at org.hibernate.type.descriptor.sql.BasicExtractor.extract(BasicExtractor.java:65)
at org.hibernate.type.AbstractStandardBasicType.nullSafeGet(AbstractStandardBasicType.java:269)
at org.hibernate.type.AbstractStandardBasicType.nullSafeGet(AbstractStandardBasicType.java:265)
at org.hibernate.type.AbstractStandardBasicType.nullSafeGet(AbstractStandardBasicType.java:238)
at org.hibernate.type.AbstractStandardBasicType.hydrate(AbstractStandardBasicType.java:357)
at org.hibernate.persister.entity.AbstractEntityPersister.hydrate(AbstractEntityPersister.java:2695)
at org.hibernate.loader.Loader.loadFromResultSet(Loader.java:1552)
at org.hibernate.loader.Loader.instanceNotYetLoaded(Loader.java:1484)
at org.hibernate.loader.Loader.getRow(Loader.java:1384)
at org.hibernate.loader.Loader.getRowFromResultSet(Loader.java:640)
at org.hibernate.loader.Loader.doQuery(Loader.java:856)
at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:289)
at org.hibernate.loader.Loader.doList(Loader.java:2463)
at org.hibernate.loader.Loader.doList(Loader.java:2449)
at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2279)
at org.hibernate.loader.Loader.list(Loader.java:2274)
at org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:470)
at org.hibernate.hql.internal.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:355)
at org.hibernate.engine.query.spi.HQLQueryPlan.performList(HQLQueryPlan.java:196)
2014-04-13 17:35:49 INFO persistence.service.WayPersistenceServiceImpl:37 - All ways fetched in 331s
at org.hibernate.internal.SessionImpl.list(SessionImpl.java:1115)
at org.hibernate.internal.QueryImpl.list(QueryImpl.java:101)
at org.hibernate.ejb.QueryImpl.getResultList(QueryImpl.java:252)
... 51 more
Caused by: java.io.StreamCorruptedException: invalid stream header: 30313033
at java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:804)
at java.io.ObjectInputStream.<init>(ObjectInputStream.java:299)
at org.hibernate.internal.util.SerializationHelper$CustomObjectInputStream.<init>(SerializationHelper.java:328)
at org.hibernate.internal.util.SerializationHelper$CustomObjectInputStream.<init>(SerializationHelper.java:318)
at org.hibernate.internal.util.SerializationHelper.doDeserialize(SerializationHelper.java:237)
... 78 more
更新:
我将Ways实体类更新为以下内容,但仍然出现错误:
I updated the Ways entity class to the following, but error still occurs :
@Entity
@Table(name = "ways")
@Cacheable
public class Way implements Serializable {
/**
*
*/
private static final long serialVersionUID = -7941769011539363185L;
/**
* Primary key for the row in table.
*/
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "id")
private Long id;
/**
* The ID to represent it across the system.
* Used for preserving historical information.
*/
@Column(name = "way_id")
private Long wayId;
/**
* The version of the way this Object represents.
*/
@Column(name = "version")
private Integer version;
/**
* The {@link User} that edited this version.
*/
@OneToOne
@PrimaryKeyJoinColumn(name = "user_id")
private User user;
/**
* Timestamp when this version of the Way was edited.
*/
@Column(name = "tstamp")
@Temporal(TemporalType.TIMESTAMP)
private Date timestamp;
/**
* The changeset that this version of the way belongs to.
*/
@Column(name = "changeset_id")
private Long changesetId;
/**
* All the tags this Way contains.
*/
@Column(name = "tags")
private String tags;
@Column(name = "bbox")
private Geometry bbox;
@Column(name = "linestring")
private Geometry linestring;
@Column(name = "nodes")
@ElementCollection(targetClass=Long.class)
private List<Long> nodes;
推荐答案
当某些东西无法反序列化时,你,上尉明显)。在您的实体映射中,以下内容可疑:
This issue is happening when something cannot be deserialized (thank you, Captain Obvious). In your entity mappings the following looks suspicious:
@Type(type = "hstore")
@Column(name = "tags", columnDefinition = "hstore")
private Object2ObjectOpenHashMap<String, String> tags = new Object2ObjectOpenHashMap<String, String>();
@Column(name = "bbox")
private Geometry bbox;
@Column(name = "linestring")
private Geometry linestring;
我的建议是看看几何
和 Object2ObjectHashMap
类 - 检查它们是否可序列化本身和它们的所有字段也可序列化,或标记为 transient
关键字。此外,如果您在这里发布这些课程,这也可能有帮助。 HstoreUserType
类别列表也可能有所帮助。
My suggestion is either to take a look over Geometry
and Object2ObjectHashMap
classes - check whether they are serializable itself and all their fields either serializable too, or marked with transient
keyword. Also if you post these classes here, this may help aswell. HstoreUserType
class listing may also be helpful.
这篇关于休眠:无法反序列化 - 无效的流头的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!