У меня есть спящий объект:
@Entity
class Foo {
//...
@Lob
public byte[] getBytes() { return bytes; }
//....
}
Моя виртуальная машина настроена с максимальным размером кучи 512 МБ. Когда я пытаюсь сохранить объект размером 75 МБ, я получаю OutOfMemoryError.
Имена методов в трассировке стека (StringBuilder, ByteArrayBlobType.toLoggableString, pretty.Printer.toString) предполагают, что hibernate пытается написать очень большое сообщение журнала, которое содержит мой объект.
Правильно ли я понимаю, почему hibernate использует так много памяти? Какой самый простой способ обойти эту проблему?
java.lang.OutOfMemoryError: Java heap space
at java.lang.AbstractStringBuilder.<init>(AbstractStringBuilder.java:44)
at java.lang.StringBuilder.<init>(StringBuilder.java:81)
at org.hibernate.type.ByteArrayBlobType.toString(ByteArrayBlobType.java:117)
at org.hibernate.type.ByteArrayBlobType.toLoggableString(ByteArrayBlobType.java:127)
at org.hibernate.pretty.Printer.toString(Printer.java:53)
at org.hibernate.pretty.Printer.toString(Printer.java:90)
at org.hibernate.event.def.AbstractFlushingEventListener.flushEverythingToExecutions(AbstractFlushingEventListener.java:97)
at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:26)
at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1000)
at org.jboss.seam.persistence.HibernateSessionProxy.flush(HibernateSessionProxy.java:181)