Java Hibernate-NClob属性
这是我的实体:Java Hibernate-NClob属性,java,hibernate,jpa,Java,Hibernate,Jpa,这是我的实体: 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.Class
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.Blob?
我可以指定另一种类型而不是java.sql.Blob(java.sql.Clob)吗
JDK 6JPA 2
休眠3.6.8.最终版
Oracle 10.2g
Postgresql 8.3(从Oracle数据库读取实体,然后写入Postgresql数据库)
我在这方面打开了一个错误我建议使用字符串类型而不是NClob,无论如何,您可以尝试用以下内容替换@Lob注释:
@Column(columnDefinition="LONGTEXT")
看看这是否有帮助。这里是我如何解决问题的:
public class MyEntity {
@Column(length=100000)
String prop;
public void setProp(String c) {
prop=c;
}
public String getProp() {
return prop;
}
}
在我的例子中,任意值
100000
确实足以处理应用程序将要处理的值。此解决方案是gret,但特定于数据库供应商。