У меня есть веб-приложение, использующее JPA и Hibernate для взаимодействия с БД.
Есть один общий репозиторий JPA, одна сущность, с которой у меня сейчас проблемы.Теперь при вызове метода удаления я получаю java.lang.OutOfMemoryError: Исключение пространства кучи Java.(это deleteByCreatedDateLessThan).
Когда в таблицах есть только некоторые записи (проверено с 20), это работает нормально, но для реальной нагрузки до 20.000.
После анализа дампа этоОказалось, что приложение загружает весь IbGeneratedData.IbPdf & IbGeneratedData.IbXml из базы данных (заполнил 80% пространства кучи).
Как я могу это остановить?Для удаления нужно просто проверить идентификаторы, чтобы удалить их ...
Я также пытался @Basic(fetch=FetchType.LAZY)
в LOB.
public interface ResponseRepository extends JpaRepository<IbResponse, String>, JpaSpecificationExecutor<IbResponse> {
@Modifying
void deleteByCreatedDateLessThan(Date maxAgedDate);
Collection<IbResponse> findByOwningUserIdEquals(String id, Sort sort);
}
@Entity(name = "IbResponse")
@Table(name = "IB_RESPONSE")
public class IbResponse implements Serializable {
@Id
@GeneratedValue(generator = "system-uuid")
@GenericGenerator(name = "system-uuid", strategy = "uuid")
@Column(name = "ID")
private String id;
@ManyToOne(fetch = FetchType.LAZY, optional = false, targetEntity = IbUser.class)
@JoinColumn(name = "USER_ID", updatable = false)
private IbUser owningUser;
@OneToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
@JoinColumn(name = "GENERATED_DATA_ID")
private IbGeneratedData generatedData;
...
}
@Entity(name = "IbGeneratedData")
@Table(name = "IB_GENERATED_DATA")
public class IbGeneratedData implements Serializable {
@Id
@GeneratedValue(generator = "system-uuid")
@GenericGenerator(name = "system-uuid", strategy = "uuid")
@Column(name = "ID")
private String id;
@Lob
@Column(name = "PDF")
private byte[] IbPdf;
@Lob
@Column(name = "XML")
private byte[] IbXml;
...
}
Spring-data-jpa: 1.7.0
Hibernate: 4.3.7
Работа в базе данных Oracle