java – Hibernate on Oracle:将String属性映射到CLOB列
发布时间:2020-12-14 16:32:15 所属栏目:Java 来源:网络整理
导读:警告:请看下面我自己的答案.该问题是由除10.2.0.4之外的类路径中存在的旧Oracle驱动程序引起的.问题解决了.留下这个问题的其余部分为后代. 我一直在冲击下列事情.这是一个简单的POJO从我的应用程序代码中删除: @Entity@Table(name = "PIGGIES")public clas
警告:请看下面我自己的答案.该问题是由除10.2.0.4之外的类路径中存在的旧Oracle驱动程序引起的.问题解决了.留下这个问题的其余部分为后代.
我一直在冲击下列事情.这是一个简单的POJO从我的应用程序代码中删除: @Entity @Table(name = "PIGGIES") public class Piggy { private Long id; private String description; public Piggy() {} @Id @GeneratedValue @Column(name = "PIGGY_ID") public Long getId() { return id; } public void setId(Long id) { this.id = id; } @Lob @Column(name = "PIGGY_DESCRIPTION") public String getDescription() { return description; } public void setDescription(String d) { description = d; } } 有一个String属性和一个CLOB列.当内容很短(例如“你好世界”)时,它仍然很好.使用较长的字符串,我得到以下异常: java.sql.SQLException: operation not allowed: streams type cannot be used in batching at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:134) at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:179) at oracle.jdbc.driver.OraclePreparedStatement.addBatch(OraclePreparedStatement.java:4236) at org.apache.commons.dbcp.DelegatingPreparedStatement.addBatch(DelegatingPreparedStatement.java:172) at org.apache.commons.dbcp.DelegatingPreparedStatement.addBatch(DelegatingPreparedStatement.java:172) at org.hibernate.jdbc.BatchingBatcher.addToBatch(BatchingBatcher.java:31) at org.hibernate.persister.entity.AbstractEntityPersister.update(AbstractEntityPersister.java:2403) 我使用Hibernate 3.2.3与Oracle JDBC驱动程序10.2.0.4.异常的消息表示批处理可能有故障.虽然我可以在这种简单的情况下禁用批处理,但我需要为“真正的”POJO启用它.实际上,现在看来,查询批处理是我们使用Hibernate的唯一原因. 所以,我的问题是,我该如何做上述工作? 编辑:有趣的观察:只要它的长度为1333个字符,我的“描述”属性的值仍然很好.这么奇怪! 编辑2:为了找到一个解决方案,我修改了getProperty()注释如下,这没有什么区别: @Lob @Type(type="text") @Column(name = "PIGGY_DESCRIPTION",length = Integer.MAX_VALUE) public String getDescription() { return description; } 编辑3:“PIGGIES”的DDL: CREATE TABLE "PIGGIES" ( "PIGGY_ID" NUMBER NOT NULL ENABLE,"PIGGY_DESCRIPTION" CLOB,CONSTRAINT "PIGGIES_PK" PRIMARY KEY ("PIGGY_ID") USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255 STORAGE(INITIAL 1048576 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645 PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT) TABLESPACE "BBDATA" ENABLE ) PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS LOGGING STORAGE(INITIAL 1048576 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645 PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT) TABLESPACE "BBDATA" LOB ("PIGGY_DESCRIPTION") STORE AS "SYS_LOB0000177753C00002$$"( TABLESPACE "BBDATA" ENABLE STORAGE IN ROW CHUNK 8192 PCTVERSION 10 NOCACHE STORAGE(INITIAL 1048576 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645 PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)) ; 这是整个堆栈: org.hibernate.exception.GenericJDBCException: could not update: [com.bamnetworks.cms.types.Piggy#934] at org.hibernate.exception.SQLStateConverter.handledNonSpecificException(SQLStateConverter.java:103) at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:91) at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43) at org.hibernate.persister.entity.AbstractEntityPersister.update(AbstractEntityPersister.java:2425) at org.hibernate.persister.entity.AbstractEntityPersister.updateOrInsert(AbstractEntityPersister.java:2307) at org.hibernate.persister.entity.AbstractEntityPersister.update(AbstractEntityPersister.java:2607) at org.hibernate.action.EntityUpdateAction.execute(EntityUpdateAction.java:92) at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:248) at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:232) at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:140) at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:298) at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:27) at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1000) at org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:338) at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:106) Caused by: java.sql.SQLException: operation not allowed: streams type cannot be used in batching at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:134) at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:179) at oracle.jdbc.driver.OraclePreparedStatement.addBatch(OraclePreparedStatement.java:4236) at org.apache.commons.dbcp.DelegatingPreparedStatement.addBatch(DelegatingPreparedStatement.java:172) at org.apache.commons.dbcp.DelegatingPreparedStatement.addBatch(DelegatingPreparedStatement.java:172) at org.hibernate.jdbc.BatchingBatcher.addToBatch(BatchingBatcher.java:31) at org.hibernate.persister.entity.AbstractEntityPersister.update(AbstractEntityPersister.java:2403) ... 45 more 解决方法
Moron警报:事实证明,我有一个陈旧的JAR,在我的类路径上有9个Oracle JDBC类.清理完毕后,所有内容都只是通过以下注释来神奇地工作:
@Lob @Column(name = "PIGGY_DESCRIPTION") public String getDescription() { return description; } 指责胖手指. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
推荐文章
站长推荐
- 用intellij Idea加载eclipse的maven项目全流程(图
- java – JUnit Derby Spring:每次测试后都会丢弃
- 是否需要Java枚举类型的防御副本?
- java – Adob??e AIR 3.1 Android的Native Exten
- java – 使用hibernate Criteria返回set而不是li
- Redis 的安装与使用
- Java利用Request请求获取IP地址的方法详解
- java – 带有extends和super作为参数的无界通配
- java – 在Spring MVC中自定义DispatcherServlet
- java – 通过转换为流式XML到JAXB Unmarshaller,
热点阅读