有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java Hibernate NClob属性

这是我的实体:

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;
   }
}

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

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。斑点? 我可以指定另一种类型而不是java吗。sql。Blob(java.sql.Clob)

JDK 6
JPA 2
休眠3.6.8。最终的
Oracle 10.2g
Postgresql 8.3(从Oracle数据库读取实体,然后写入Postgresql数据库)

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


共 (2) 个答案

  1. # 1 楼答案

    以下是我解决问题的方法:

    public class MyEntity {
       @Column(length=100000)
       String prop;
    
       public void setProp(String c) {
           prop=c;
       }
    
       public String getProp() {
           return prop;
       }
    }
    

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

  2. # 2 楼答案

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

    @Column(columnDefinition="LONGTEXT")
    

    看看这是否有帮助