| When creating Blob with Hibernate, I get exception with files larger than Integer.MAX_VALUE bytes. Debugged the code and found that org.hibernate.engine.jdbc.BlobProxy returns negative value for stream length. Usage: session.getLobHelper().createBlob(InputStream stream, long length) I suggest that the cause is in StreamBackedBinaryStream.getLength(): long -> int -> long public long getLength() { return (int) length; } Currently using Hibernate 4.2, but saw the same kind of casting in Hibernate 5. Stack trace: java.lang.IndexOutOfBoundsException at java.io.FileInputStream.readBytes(Native Method) at java.io.FileInputStream.read(FileInputStream.java:255) at org.postgresql.jdbc2.AbstractJdbc2Statement.setBlob(AbstractJdbc2Statement.java:2890) at org.jboss.resource.adapter.jdbc.WrappedPreparedStatement.setBlob(WrappedPreparedStatement.java:787) at org.hibernate.type.descriptor.sql.BlobTypeDescriptor$4$1.doBind(BlobTypeDescriptor.java:118) at org.hibernate.type.descriptor.sql.BasicBinder.bind(BasicBinder.java:93) at org.hibernate.type.AbstractStandardBasicType.nullSafeSet(AbstractStandardBasicType.java:280) at org.hibernate.type.AbstractStandardBasicType.nullSafeSet(AbstractStandardBasicType.java:275) at org.hibernate.type.AbstractSingleColumnStandardBasicType.nullSafeSet(AbstractSingleColumnStandardBasicType.java:57) at org.hibernate.persister.entity.AbstractEntityPersister.dehydrate(AbstractEntityPersister.java:2786) at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:3064) at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:3509) at org.hibernate.action.internal.EntityInsertAction.execute(EntityInsertAction.java:88) at org.hibernate.engine.spi.ActionQueue.execute(ActionQueue.java:364) at org.hibernate.engine.spi.ActionQueue.executeActions(ActionQueue.java:356) at org.hibernate.engine.spi.ActionQueue.executeActions(ActionQueue.java:277) at org.hibernate.event.internal.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:328) at org.hibernate.event.internal.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:52) at org.hibernate.internal.SessionImpl.flush(SessionImpl.java:1234) at org.hibernate.internal.SessionImpl.managedFlush(SessionImpl.java:404) |