Hibernate 抛出 SQLException 无法重置阅读器

Pre*_*eet 4 hibernate

java.sql.SQLException: could not reset reader
        at org.hibernate.lob.ClobImpl.getCharacterStream(ClobImpl.java:100)
        at org.hibernate.type.ClobType.set(ClobType.java:70)
        at org.hibernate.type.ClobType.nullSafeSet(ClobType.java:141)
        at org.hibernate.persister.entity.AbstractEntityPersister.dehydrate(AbstractEntityPersister.java:2025)
        at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2271)
        at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2688)
        at org.hibernate.action.EntityInsertAction.execute(EntityInsertAction.java:79)
        at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:279)
        at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:263)
        at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:167)
        at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:321)
        at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:50)
        at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1027)
Run Code Online (Sandbox Code Playgroud)

你好,

上面是堆栈跟踪。它可以处理少量数据,但处理大量数据时会失败。我不明白可能是什么问题?

问候,普雷特

Inf*_*igo 5

我们刚刚解决了一个类似的问题,我想在这里描述这个问题,以防有人遇到它。请注意,还有一个关于同一问题的问题。我们有 Oracle 10、Hibernate 3、Java 1.4 和修补过的 Ojdbc14。我们使用 \xcb\x87Hibernate.createClob(String)\xcb\x87 创建了 CLOB。程序(批处理作业)在处理大字符串 (~700KB) 时失败。

\n\n

问题是,在 Hibernate 中,我们首先插入带有 CLOB 的实体并更新它(包括 CLOB)。第二次更新是多对一更新的一部分。CLOB 在这期间没有改变,只是 Hibernate 想要更新它两次。并且出现“无法重置”读取器错误。看来它不能两次使用同一个流。我们通过确保 CLOB 仅保存一次来修复此问题。

\n