1 Reply Latest reply on Sep 30, 2006 3:17 AM by hauch

    How to map String[]

    jc7442

      I have a String[] in a persistent entity. I've tried to add the @Lob annotation. Unfortunattly it does not works, I have the following exception:

      Caused by: java.lang.ClassCastException: [Ljava.lang.String;
       at org.hibernate.type.StringClobType.nullSafeSet(StringClobType.java:56)
       at org.hibernate.type.CustomType.nullSafeSet(CustomType.java:145)
       at org.hibernate.persister.entity.AbstractEntityPersister.dehydrate(AbstractEntityPersister.java:1910)
       at org.hibernate.persister.entity.AbstractEntityPersister.dehydrate(AbstractEntityPersister.java:1887)
       at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2117)
       at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2503)
       at org.hibernate.action.EntityInsertAction.execute(EntityInsertAction.java:51)
       at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:248)
       at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:232)
       at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:139)
       at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:297)
       at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:27)
       at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:993)
       at org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:340)


      The String[] is cast in String. Consequetly we have an exception. Moreover, array is stored in DB as CLOB (maybe a blob will be better).

      I used oracle10g, Embedded EJB3 RC9.

      Is it possible to map an String[] ?

      I have tried with the Basic annotation. It works only if there is few String in the array. When I try to put 200 String in the array I have the exception:

      Caused by: org.hibernate.exception.GenericJDBCException: Could not execute JDBC batch update
       at org.hibernate.exception.SQLStateConverter.handledNonSpecificException(SQLStateConverter.java:103)
       at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:91)
       at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43)
       at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:249)
       at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:235)
       at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:139)
       at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:297)
       at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:27)
       at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:993)
       at org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:340)
       at org.hibernate.ejb.AbstractEntityManagerImpl$1.beforeCompletion(AbstractEntityManagerImpl.java:475)
       ... 20 more
      Caused by: java.sql.BatchUpdateException: ORA-12899: valeur trop grande pour la colonne "ROOT"."TOTOPE"."SS" (réelle : 2134, maximum : 255)
      
       at oracle.jdbc.driver.DatabaseError.throwBatchUpdateException(DatabaseError.java:498)
       at oracle.jdbc.driver.OraclePreparedStatement.executeBatch(OraclePreparedStatement.java:12369)
       at org.jboss.resource.adapter.jdbc.WrappedStatement.executeBatch(WrappedStatement.java:517)INFO 26-09 14:20:28,584 (Log4JLogger.java:info:94) -closing
      INFO 26-09 14:20:28,584 (Log4JLogger.java:info:94) -Running hbm2ddl schema export
      DEBUG 26-09 14:20:28,584 (Log4JLogger.java:debug:84) -import file not found: /import.sql
      INFO 26-09 14:20:28,584 (Log4JLogger.java:info:94) -exporting generated schema to database
      DEBUG 26-09 14:20:28,584 (Log4JLogger.java:debug:84) -drop table Assay cascade constraints
      
       at org.hibernate.jdbc.BatchingBatcher.doExecuteBatch(BatchingBatcher.java:58)
       at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:242)
       ... 27 more


        • 1. Re: How to map String[]
          hauch

          I don't think it necessarily has anything to do with the usage of String[].
          I have had a similar problem (ie "Could not execute JDBC batch update" with lob) using oracle10g and what solved it for me was downloading the newest version of the jdbc driver (ojdbc14.jar as far as I remember).