Java – hibernate – insufficient memory for inserting large blobs
In POJO, I have:
public void setBlob(InputStream in,Long l) { this.blob = Hibernate.getLobCreator(SessionFactoryHelper.sessionFactory.getCurrentSession()).createBlob(in,l); }
I make hibernate. Com in the configuration jdbc. use_ streams_ for_ Binary is true, but does it really change anything?
When saving an entity, in session On flush (), I get:
org.hibernate.engine.jdbc.batch.internal.AbstractBatchImpl release INFO: HHH000010: On release of batch it still contained JDBC statements Exception in thread "AWT-EventQueue-0" java.lang.OutOfMemoryError: Java heap space Heap dump file created [46180174 bytes in 1.662 secs] at java.util.Arrays.copyOf(Arrays.java:2271) at java.io.ByteArrayOutputStream.grow(ByteArrayOutputStream.java:113) at java.io.ByteArrayOutputStream.ensureCapacity(ByteArrayOutputStream.java:93) at java.io.ByteArrayOutputStream.write(ByteArrayOutputStream.java:140) at org.hibernate.type.descriptor.java.DataHelper.extractBytes(DataHelper.java:171) at org.hibernate.type.descriptor.java.BlobTypeDescriptor.unwrap(BlobTypeDescriptor.java:121) at org.hibernate.type.descriptor.java.BlobTypeDescriptor.unwrap(BlobTypeDescriptor.java:45) at org.hibernate.type.descriptor.sql.BlobTypeDescriptor$4$1.doBind(BlobTypeDescriptor.java:105) at org.hibernate.type.descriptor.sql.BasicBinder.bind(BasicBinder.java:92) at org.hibernate.type.AbstractStandardBasicType.nullSafeSet(AbstractStandardBasicType.java:305) at org.hibernate.type.AbstractStandardBasicType.nullSafeSet(AbstractStandardBasicType.java:300) at org.hibernate.type.AbstractSingleColumnStandardBasicType.nullSafeSet(AbstractSingleColumnStandardBasicType.java:57) at org.hibernate.persister.entity.AbstractEntityPersister.dehydrate(AbstractEntityPersister.java:2599) at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2853) at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:3291) at org.hibernate.action.internal.EntityInsertAction.execute(EntityInsertAction.java:88) at org.hibernate.engine.spi.ActionQueue.execute(ActionQueue.java:362) at org.hibernate.engine.spi.ActionQueue.executeActions(ActionQueue.java:354) at org.hibernate.engine.spi.ActionQueue.executeActions(ActionQueue.java:275) at org.hibernate.event.internal.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:326) at org.hibernate.event.internal.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:52) at org.hibernate.internal.SessionImpl.flush(SessionImpl.java:1127)
Hibernate 4.1. Why does hibernate unpack streams to bytea? How to make hibernate use the preprocessing statement setbinarystream? I really need help
Solution
I believe the problem is that your in - memory object still fills its byte array
I suggest a solution: do not store blogs in POJOs Store the blobs in the database directly through JDBC or disk, and then only keep the reference to the blob in the POJO (database primary key or disk path / file name)
翻译错误 TIMEOUT
Getting / saving blobs each time is more work, but if blobs are too large for memory, there may be no other choice