Hibernate 如何有效地处理 100.000+ 个实体更新

标签 hibernate postgresql jakarta-ee

我有几个客户想要使用 CSV 文件更新他们的数据,典型客户的文件有 1.000 到 20.000 行。

解析行后,我将新数据合并到现有实体中。使用批量保存来保存所有已修改的实体:

public void batchSaveOrUpdate(List<Item> items) {
    Transaction transaction = session.beginTransaction();
    List<Item> itemsToEvict = new ArrayList<>();

    int count = 0;
    for (Item item : itemss) {
        session.saveOrUpdate(item);
        itemsToEvict.add(item);

        if (count++ % 25 == 0) {
            session.flush();
            itemsToEvict.forEach(session::evict);
            itemsToEvict.clear();
        }
    }

    transaction.commit();
    session.flush();
}

它适用于最多 25.000 行的正常导入,但现在我有一个客户,其 CSV 文件最多包含 600.000 行。 即使在确定已修改的项目后,也有 100.000 多个实体同时更新。 由于 WildFly 会在一段时间后收割所有交易,因此大客户的所有进口都会失败。 我已经将事务超时增加到一小时,进一步增加对我来说不是解决方案。

此时我可以做些什么来提高 hibernate 更新性能?

最佳答案

您可以尝试编写自己的存储过程。 Hibernate 不是您需要的最佳选择..

关于Hibernate 如何有效地处理 100.000+ 个实体更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31966624/

相关文章:

java - 如何测试 EJB 中的异常

android - 适用于 Android 的 Java 企业应用程序

java - hibernate @onetomany FK 未设置

php - 将查询结果放入对象

sql - 选择 postgreSQL 中可用的最准确的数据?

java - 带有安全 header 的 SOAP Web 服务

java - 带 ehcache 的 Hibernate 4 是否需要 ehcache-core 库?

hibernate - Glassfish 4.1、JPA Hibernate 5.0.2、Oracle 12.1 集成错误

java - 如何在JPA(Spring Data JPA)中实现简单的全文搜索?

postgresql - 这是 JOIN、Lookup 还是如何只选择与两个表中的列匹配的记录