Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/jenkins/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在oracle blob中持久化java对象_Java_Oracle_Serialization_Persist - Fatal编程技术网

在oracle blob中持久化java对象

在oracle blob中持久化java对象,java,oracle,serialization,persist,Java,Oracle,Serialization,Persist,我有点小问题,也许你可以帮我一把。我试图做的是将任何给定的java对象(可序列化)持久化到数据库中的blob字段中 目标: 在Oracle Blob中持久化java对象 方法: 序列化对象并创建BlobDomain作为实体的一部分,映射到数据库中的BLOB字段 代码: org.hibernate.type.SerializationException: could not deserialize at org.hibernate.util.SerializationHelper.dese

我有点小问题,也许你可以帮我一把。我试图做的是将任何给定的java对象(可序列化)持久化到数据库中的blob字段中

目标: 在Oracle Blob中持久化java对象

方法: 序列化对象并创建BlobDomain作为实体的一部分,映射到数据库中的BLOB字段

代码:

org.hibernate.type.SerializationException: could not deserialize
    at org.hibernate.util.SerializationHelper.deserialize(SerializationHelper.java:188)
    at org.hibernate.util.SerializationHelper.deserialize(SerializationHelper.java:211)
    at org.hibernate.type.SerializableType.fromBytes(SerializableType.java:105)
    at org.hibernate.type.SerializableType.get(SerializableType.java:62)
    at org.hibernate.type.NullableType.nullSafeGet(NullableType.java:184)
    at org.hibernate.type.NullableType.nullSafeGet(NullableType.java:173)
    at org.hibernate.type.AbstractType.hydrate(AbstractType.java:105)
    at org.hibernate.persister.entity.AbstractEntityPersister.hydrate(AbstractEntityPersister.java:2124)
    at org.hibernate.loader.Loader.loadFromResultSet(Loader.java:1404)
    at org.hibernate.loader.Loader.instanceNotYetLoaded(Loader.java:1332)
    at org.hibernate.loader.Loader.getRow(Loader.java:1230)
    at org.hibernate.loader.Loader.getRowFromResultSet(Loader.java:603)
    at org.hibernate.loader.Loader.doQuery(Loader.java:724)
    at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:259)
    at org.hibernate.loader.Loader.loadCollection(Loader.java:2015)
    at org.hibernate.loader.collection.CollectionLoader.initialize(CollectionLoader.java:59)
    at org.hibernate.persister.collection.AbstractCollectionPersister.initialize(AbstractCollectionPersister.java:587)
    at org.hibernate.event.def.DefaultInitializeCollectionEventListener.onInitializeCollection(DefaultInitializeCollectionEventListener.java:83)
    at org.hibernate.impl.SessionImpl.initializeCollection(SessionImpl.java:1743)
    at org.hibernate.collection.AbstractPersistentCollection.forceInitialization(AbstractPersistentCollection.java:476)
    at org.hibernate.engine.StatefulPersistenceContext.initializeNonLazyCollections(StatefulPersistenceContext.java:867)
    at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:264)
    at org.hibernate.loader.Loader.doList(Loader.java:2228)
    at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2125)
    at org.hibernate.loader.Loader.list(Loader.java:2120)
    at org.hibernate.hql.classic.QueryTranslatorImpl.list(QueryTranslatorImpl.java:935)
    at org.hibernate.engine.query.HQLQueryPlan.performList(HQLQueryPlan.java:196)
    at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1148)
    at org.hibernate.impl.QueryImpl.list(QueryImpl.java:102)
    at org.hibernate.ejb.QueryImpl.getResultList(QueryImpl.java:67)
    ... 38 more
Caused by: java.io.StreamCorruptedException: invalid stream header
    at java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:764)
    at java.io.ObjectInputStream.<init>(ObjectInputStream.java:277)
    at org.hibernate.util.SerializationHelper$CustomObjectInputStream.<init>(SerializationHelper.java:223)
    at org.hibernate.util.SerializationHelper.deserialize(SerializationHelper.java:180)
    ... 67 more
实体:

@Entity
@Table(name = "ARGUMENT")
public class Argument implements java.io.Serializable {
    private static final long   serialVersionUID    = 1L;

    @Id @Column(name = "ID")
    private Long                id;

    @Column(name = "B_VALUE")
    private BlobDomain          value;

...
}
设置值:

private void createArgument (Serializable argVal) throws RuntimeException {
    // argVal is the object to be stored
    Argument arg = new Argument();
    byte[] bytes = serialize(argVal);
    BlobDomain value = new BlobDomain(bytes);
    arg.setValue(value);
    argumentDao.persist(arg);
}

public byte[] serialize(Object obj) throws IOException, SerialException, SQLException {
    ByteArrayOutputStream bs = new ByteArrayOutputStream();
    ObjectOutputStream os = new ObjectOutputStream(bs);
    os.writeObject(obj);
    os.close();
    return bs.toByteArray();
}
错误: 参数实体正在数据库(参数表)中正确排序,但当我尝试查询表中的任何行时,它会引发以下异常:

org.hibernate.type.SerializationException:无法反序列化

有人知道为什么会这样吗

提前谢谢

完整堆栈:

org.hibernate.type.SerializationException: could not deserialize
    at org.hibernate.util.SerializationHelper.deserialize(SerializationHelper.java:188)
    at org.hibernate.util.SerializationHelper.deserialize(SerializationHelper.java:211)
    at org.hibernate.type.SerializableType.fromBytes(SerializableType.java:105)
    at org.hibernate.type.SerializableType.get(SerializableType.java:62)
    at org.hibernate.type.NullableType.nullSafeGet(NullableType.java:184)
    at org.hibernate.type.NullableType.nullSafeGet(NullableType.java:173)
    at org.hibernate.type.AbstractType.hydrate(AbstractType.java:105)
    at org.hibernate.persister.entity.AbstractEntityPersister.hydrate(AbstractEntityPersister.java:2124)
    at org.hibernate.loader.Loader.loadFromResultSet(Loader.java:1404)
    at org.hibernate.loader.Loader.instanceNotYetLoaded(Loader.java:1332)
    at org.hibernate.loader.Loader.getRow(Loader.java:1230)
    at org.hibernate.loader.Loader.getRowFromResultSet(Loader.java:603)
    at org.hibernate.loader.Loader.doQuery(Loader.java:724)
    at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:259)
    at org.hibernate.loader.Loader.loadCollection(Loader.java:2015)
    at org.hibernate.loader.collection.CollectionLoader.initialize(CollectionLoader.java:59)
    at org.hibernate.persister.collection.AbstractCollectionPersister.initialize(AbstractCollectionPersister.java:587)
    at org.hibernate.event.def.DefaultInitializeCollectionEventListener.onInitializeCollection(DefaultInitializeCollectionEventListener.java:83)
    at org.hibernate.impl.SessionImpl.initializeCollection(SessionImpl.java:1743)
    at org.hibernate.collection.AbstractPersistentCollection.forceInitialization(AbstractPersistentCollection.java:476)
    at org.hibernate.engine.StatefulPersistenceContext.initializeNonLazyCollections(StatefulPersistenceContext.java:867)
    at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:264)
    at org.hibernate.loader.Loader.doList(Loader.java:2228)
    at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2125)
    at org.hibernate.loader.Loader.list(Loader.java:2120)
    at org.hibernate.hql.classic.QueryTranslatorImpl.list(QueryTranslatorImpl.java:935)
    at org.hibernate.engine.query.HQLQueryPlan.performList(HQLQueryPlan.java:196)
    at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1148)
    at org.hibernate.impl.QueryImpl.list(QueryImpl.java:102)
    at org.hibernate.ejb.QueryImpl.getResultList(QueryImpl.java:67)
    ... 38 more
Caused by: java.io.StreamCorruptedException: invalid stream header
    at java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:764)
    at java.io.ObjectInputStream.<init>(ObjectInputStream.java:277)
    at org.hibernate.util.SerializationHelper$CustomObjectInputStream.<init>(SerializationHelper.java:223)
    at org.hibernate.util.SerializationHelper.deserialize(SerializationHelper.java:180)
    ... 67 more
org.hibernate.type.SerializationException:无法反序列化
位于org.hibernate.util.SerializationHelper.deserialize(SerializationHelper.java:188)
位于org.hibernate.util.SerializationHelper.deserialize(SerializationHelper.java:211)
位于org.hibernate.type.SerializableType.fromBytes(SerializableType.java:105)
位于org.hibernate.type.SerializableType.get(SerializableType.java:62)
位于org.hibernate.type.NullableType.nullablesafeget(NullableType.java:184)
位于org.hibernate.type.NullableType.nullablesafeget(NullableType.java:173)
位于org.hibernate.type.AbstractType.hydroge(AbstractType.java:105)
位于org.hibernate.persister.entity.AbstractEntityPersister.hydroge(AbstractEntityPersister.java:2124)
位于org.hibernate.loader.loader.loadFromResultSet(loader.java:1404)
位于org.hibernate.loader.loader.instanceNotYetLoaded(loader.java:1332)
位于org.hibernate.loader.loader.getRow(loader.java:1230)
位于org.hibernate.loader.loader.getRowFromResultSet(loader.java:603)
位于org.hibernate.loader.loader.doQuery(loader.java:724)
在org.hibernate.loader.loader.doQueryAndInitializeNonLazyCollections(loader.java:259)上
位于org.hibernate.loader.loader.loadCollection(loader.java:2015)
位于org.hibernate.loader.collection.CollectionLoader.initialize(CollectionLoader.java:59)
位于org.hibernate.persister.collection.AbstractCollectionPersister.initialize(AbstractCollectionPersister.java:587)
位于org.hibernate.event.def.DefaultInitializeCollectionEventListener.onInitializeCollection(DefaultInitializeCollectionEventListener.java:83)
位于org.hibernate.impl.SessionImpl.initializeCollection(SessionImpl.java:1743)
位于org.hibernate.collection.AbstractPersistentCollection.forceInitialization(AbstractPersistentCollection.java:476)
位于org.hibernate.engine.StatefulPersistenceContext.initializeNonLazyCollections(StatefulPersistenceContext.java:867)
在org.hibernate.loader.loader.doQueryAndInitializeNonLazyCollections(loader.java:264)上
位于org.hibernate.loader.loader.doList(loader.java:2228)
位于org.hibernate.loader.loader.listIgnoreQueryCache(loader.java:2125)
位于org.hibernate.loader.loader.list(loader.java:2120)
位于org.hibernate.hql.classic.QueryTranslatorImpl.list(QueryTranslatorImpl.java:935)
位于org.hibernate.engine.query.HQLQueryPlan.performList(HQLQueryPlan.java:196)
位于org.hibernate.impl.SessionImpl.list(SessionImpl.java:1148)
位于org.hibernate.impl.QueryImpl.list(QueryImpl.java:102)
位于org.hibernate.ejb.QueryImpl.getResultList(QueryImpl.java:67)
... 38多
原因:java.io.StreamCorruptedException:流标头无效
位于java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:764)
位于java.io.ObjectInputStream。(ObjectInputStream.java:277)
位于org.hibernate.util.SerializationHelper$CustomObjectInputStream。(SerializationHelper.java:223)
位于org.hibernate.util.SerializationHelper.deserialize(SerializationHelper.java:180)
... 67多

您需要添加注释

@Lob


import javax.persistence.Lob;

@Column(name = "B_VALUE")
@Lob
private BlobDomain          value;
如果对象较大,也可以定义柱的长度

@Column(length = 20971520)

@Lob
,指定持久属性或字段应作为大对象持久化到数据库支持的大对象类型

谢谢你的快速回复。我会试试这个,让你知道它是否有效。再次感谢。非常感谢你。注释完成了它的工作!