2012-02-08 2 views
0

Вот моя сущность: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.Blob? Могу ли я указать другой тип вместо java.sql.Blob (java.sql.Clob)?

JDK 6
JPA 2
Спящий 3.6.8.Final
Oracle 10.2g
Postgresql 8.3 (Объект считывается из базы данных Oracle, а затем записать a Postgresql)

Я открыл ошибку на этом on JIRA

ответ

1

Вот как я решить мою проблему:

public class MyEntity { 
    @Column(length=100000) 
    String prop; 

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

    public String getProp() { 
     return prop; 
    } 
} 

В моем случае произвольное значение 100000 достаточно реально для обработки значений приложение будет иметь дело.

1

Я бы рекомендовал использовать тип String, вместо NCLOB, в любом случае вы можете попробовать заменить @Lob аннотацию с:

@Column(columnDefinition="LONGTEXT") 

и посмотреть, если это помогает.

+0

Это решение является gret, но спецификатором DB. – Stephan