Hibernate - свойство NClob - PullRequest
       1

Hibernate - свойство NClob

0 голосов
/ 08 февраля 2012

Вот моя сущность:

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
Hibernate 3.6.8.Final
Oracle 10.2g
Postgresql 8,3 (объект считывается из базы данных Oracle, а затем записывается в базу данных Postgresql)

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

Ответы [ 2 ]

1 голос
/ 08 февраля 2012

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

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

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

   public String getProp() {
       return prop;
   }
}

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

1 голос
/ 08 февраля 2012

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

@Column(columnDefinition="LONGTEXT")

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...