Prashant Bhat
unread,Jan 10, 2008, 1:21:22 AM1/10/08Sign in to reply to author
Sign in to forward
You do not have permission to delete messages in this group
Sign in to report message
Either email addresses are anonymous for this group or you need the view member email addresses permission to view the original message
to H2 Database
Hi Thomas,
I've an entity with a property of type byte[] which is mapped as blob.
I use it store a file as an attachment. When persisting the new
entity, it works fine but when the same object is being loaded, it
fails, because H2Dictionary has 'useGetObjectForBlobs' set to true,
whereas the default in DBDictionary is false. I changed it to false
and is working for me!
The 'getBytes' method uses 'rs.getObject(column);' which fails with
the following exception:
Caused by: java.lang.ClassCastException: java.io.ByteArrayInputStream
cannot be cast to [B
at
org.apache.openjpa.jdbc.sql.DBDictionary.getBytes(DBDictionary.java:
531)
at
org.apache.openjpa.jdbc.sql.ResultSetResult.getBytesInternal(ResultSetResult.java:
278)
at
org.apache.openjpa.jdbc.sql.ResultSetResult.getObjectInternal(ResultSetResult.java:
404)
at
org.apache.openjpa.jdbc.sql.AbstractResult.getObject(AbstractResult.java:
662)
at
org.apache.openjpa.jdbc.meta.strats.HandlerStrategies.loadDataStore(HandlerStrategies.java:
205)
at
org.apache.openjpa.jdbc.meta.strats.HandlerFieldStrategy.load(HandlerFieldStrategy.java:
172)
at org.apache.openjpa.jdbc.meta.FieldMapping.load(FieldMapping.java:
796)
at
org.apache.openjpa.jdbc.kernel.JDBCStoreManager.load(JDBCStoreManager.java:
841)
at
org.apache.openjpa.jdbc.kernel.JDBCStoreManager.load(JDBCStoreManager.java:
793)
at
org.apache.openjpa.jdbc.kernel.JDBCStoreManager.load(JDBCStoreManager.java:
483)
at
org.apache.openjpa.kernel.DelegatingStoreManager.load(DelegatingStoreManager.java:
116)
at
org.apache.openjpa.kernel.ROPStoreManager.load(ROPStoreManager.java:
78)
at
org.apache.openjpa.kernel.StateManagerImpl.loadFields(StateManagerImpl.java:
2893)
at
org.apache.openjpa.kernel.StateManagerImpl.loadField(StateManagerImpl.java:
2971)
at
org.apache.openjpa.kernel.StateManagerImpl.beforeAccessField(StateManagerImpl.java:
1476)
at
org.apache.openjpa.kernel.StateManagerImpl.accessingField(StateManagerImpl.java:
1461)
So is it safe to change 'useGetObjectForBlobs' property to false? If
so, I can create a jira issue in OpenJPA to get it updated:-)
Thanks,
Prashant
P.S. I'm using the latest snapshot of OpenJPA and H2-1.0.64