[英]Memory impact of Hibernate transactions
我正在使用JAX-RS Web应用程序,该应用程序将完整的文件夹内容读入数据库。 该文件夹中的文件可能很大(+ -100Mb)。 JAXB用于将xml解组为Java对象。 这些对象使用Hibernate持久化到数据库中。
为了避免对内存造成影响,我决定不将完整文件的内容保留在内存中,而是使用流技术分别处理每个对象。
另一个要求是该文件夹是事务处理的。 因此,如果其中一个xml中发生错误,则将完整的文件夹内容移至错误文件夹,并回滚已经添加到数据库中的元素。
现在我的问题与休眠的内存管理有关。 由于真正的提交是在最后完成的(在使用实体管理器将所有元素都持久保存到数据库之后),休眠状态是否始终将数据真正提交到内存中? 如果是这样,我在文件夹中的文件流传输方面是否具有任何优势,还是因为在提交数据库之前,Spring事务将所有元素都保留在内存中,所以它完全没有用吗?
如果您想在Hibernate中以这种方式进行流式传输,可以做几件事。
Transaction tx = session.beginTransaction();
try {
while(...) {
processNextRecord(session);
session.flush();
session.clear();
}
tx.commit();
} catch (Exception ex) {
tx.rollback();
}
有关所有这些的详细说明,请查看Hibernate的批处理文档。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.