[jboss-user] [Persistence, JBoss/CMP, Hibernate, Database] - Blob to String mapping

test222222 do-not-reply at jboss.com
Fri May 1 00:45:17 EDT 2009


Hello,
I'm using Hibernate as JPA provider and I'm trying to map clob field form database to String attribute in entity (JPA spec allows this).

Declaration in entity:
@Lob
  | String name;

Declaration in database table:
name  varchar(max),

But when I tried to read entity I got following exceptions (depending on jdbc driver I used):

Caused by: com.microsoft.sqlserver.jdbc.SQLServerException: The conversion from varchar to BLOB is unsupported.
        at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDriverError(SQLServerException.java:170)
        at com.microsoft.sqlserver.jdbc.DataTypes.throwConversionError(DataTypes.java:946)
        at com.microsoft.sqlserver.jdbc.ServerDTVImpl.getValue(dtv.java:1952)
        at com.microsoft.sqlserver.jdbc.DTV.getValue(dtv.java:175)
        at com.microsoft.sqlserver.jdbc.Column.getValue(Column.java:113)
        at com.microsoft.sqlserver.jdbc.SQLServerResultSet.getValue(SQLServerResultSet.java:1982)
        at com.microsoft.sqlserver.jdbc.SQLServerResultSet.getValue(SQLServerResultSet.java:1967)
        at com.microsoft.sqlserver.jdbc.SQLServerResultSet.getBlob(SQLServerResultSet.java:2444)
        at org.hibernate.type.BlobType.get(BlobType.java:80)
        at org.hibernate.type.BlobType.nullSafeGet(BlobType.java:134)
        at org.hibernate.loader.hql.QueryLoader.getResultColumnOrRow(QueryLoader.java:356)
        at org.hibernate.loader.Loader.getRowFromResultSet(Loader.java:629)
        at org.hibernate.loader.Loader.doQuery(Loader.java:724)
        at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:259)
        at org.hibernate.loader.Loader.doList(Loader.java:2228)

or 

org.hibernate.PropertyAccessException: could not set a field value by reflection setter of model.Entity.name
javax.persistence.PersistenceException: org.hibernate.PropertyAccessException: could not set a field value by reflection setter of model.Entity.name
        at org.hibernate.ejb.AbstractEntityManagerImpl.throwPersistenceException(AbstractEntityManagerImpl.java:614)
        at org.hibernate.ejb.QueryImpl.getResultList(QueryImpl.java:76)
        at TestTest.test3(TestTest.java:66)
Caused by: org.hibernate.PropertyAccessException: could not set a field value by reflection setter of model.Entity.name
        at org.hibernate.property.DirectPropertyAccessor$DirectSetter.set(DirectPropertyAccessor.java:114)
        at org.hibernate.tuple.entity.AbstractEntityTuplizer.setPropertyValues(AbstractEntityTuplizer.java:360)
        at org.hibernate.tuple.entity.PojoEntityTuplizer.setPropertyValues(PojoEntityTuplizer.java:221)
        at org.hibernate.persister.entity.AbstractEntityPersister.setPropertyValues(AbstractEntityPersister.java:3594)
        at org.hibernate.engine.TwoPhaseLoad.initializeEntity(TwoPhaseLoad.java:152)
        at org.hibernate.loader.Loader.initializeEntitiesAndCollections(Loader.java:877)
        at org.hibernate.loader.Loader.doQuery(Loader.java:752)
        at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:259)
        at org.hibernate.loader.Loader.doList(Loader.java:2228)
        at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2125)
        at org.hibernate.loader.Loader.list(Loader.java:2120)
        at org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:401)
        at org.hibernate.hql.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:361)
        at org.hibernate.engine.query.HQLQueryPlan.performList(HQLQueryPlan.java:196)
        at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1148)
        at org.hibernate.impl.QueryImpl.list(QueryImpl.java:102)
        at org.hibernate.ejb.QueryImpl.getResultList(QueryImpl.java:67)
Caused by: java.lang.IllegalArgumentException: Can not set int field model.Entity.name to org.hibernate.lob.SerializableBlob
        at java.lang.reflect.Field.set(Field.java:657)
        at org.hibernate.property.DirectPropertyAccessor$DirectSetter.set(DirectPropertyAccessor.java:102) 

Which suggests that hibernate doesn't support this mapping. Is it true? Is there any clean solution to this problem or I have to use some kind of workaround?

My environment:
MS SQL Server 2005, Hibernate (3.3.1.GA), JDBC Driver: JTDS (1.2.2) or Microsoft SQL Driver (2.0).

Greetings
Slawek


View the original post : http://www.jboss.org/index.html?module=bb&op=viewtopic&p=4227963#4227963

Reply to the post : http://www.jboss.org/index.html?module=bb&op=posting&mode=reply&p=4227963



More information about the jboss-user mailing list