首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Hibernate - NClob属性

Hibernate - NClob属性
EN

Stack Overflow用户
提问于 2012-02-08 11:23:13
回答 2查看 1.3K关注 0票数 0

这是我的实体:

代码语言:javascript
复制
public class MyEntity {
   @javax.persistence.Lob
   java.sql.NClob prop;

   public void setProp(java.sql.NClob c) {
       prop=c;
   }

   public java.sql.NClob getProp() {
       return prop;
   }
}

当将其刷新到数据库时,我会得到以下异常:

代码语言:javascript
复制
java.lang.ClassCastException: oracle.sql.NCLOB cannot be cast to java.sql.Blob 
 at org.hibernate.type.BlobType.getReplacement(BlobType.java:37) 
 at org.hibernate.type.AbstractStandardBasicType.replace(AbstractStandardBasicType.java:359) 
 at org.hibernate.type.TypeHelper.replace(TypeHelper.java:212) 
 at org.hibernate.event.def.DefaultMergeEventListener.copyValues(DefaultMergeEventListener.java:600) 
 at org.hibernate.event.def.DefaultMergeEventListener.mergeTransientEntity(DefaultMergeEventListener.java:337) 
 at org.hibernate.event.def.DefaultMergeEventListener.entityIsTransient(DefaultMergeEventListener.java:303) 
 at org.hibernate.event.def.DefaultMergeEventListener.entityIsDetached(DefaultMergeEventListener.java:464) 
 at org.hibernate.event.def.DefaultMergeEventListener.onMerge(DefaultMergeEventListener.java:255) 
 at org.hibernate.event.def.DefaultMergeEventListener.onMerge(DefaultMergeEventListener.java:84) 
 at org.hibernate.impl.SessionImpl.fireMerge(SessionImpl.java:867) 
 at org.hibernate.impl.SessionImpl.merge(SessionImpl.java:851) 
 at org.hibernate.impl.SessionImpl.merge(SessionImpl.java:855) 
 at org.hibernate.ejb.AbstractEntityManagerImpl.merge(AbstractEntityManagerImpl.java:851)

为什么Hibernate试图将其转换为java.sql.Blob?我可以指定另一种类型而不是java.sql.Blob (java.sql.Clob)吗?

JDK 6

JPA 2

Hibernate 3.6.8最后的

Oracle10.2g

PostgreSQL8.3(该实体从Oracle数据库读取,然后写入Postgresql数据库)

我在这个论JIRA上打开了一个bug

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-02-08 13:40:16

在这里我如何解决我的问题:

代码语言:javascript
复制
public class MyEntity {
   @Column(length=100000)
   String prop;

   public void setProp(String c) {
       prop=c;
   }

   public String getProp() {
       return prop;
   }
}

在我的例子中,任意值100000确实足以处理应用程序将要处理的值。

票数 1
EN

Stack Overflow用户

发布于 2012-02-08 12:31:17

我建议使用字符串类型而不是NClob,无论如何,您可以尝试用以下方式替换@Lob注释:

代码语言:javascript
复制
@Column(columnDefinition="LONGTEXT")

看看这是否有帮助。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9192350

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档