当前位置: 首页 > 知识库问答 >
问题:

如何Hibernate批处理插入与实时数据?是否使用@Transactional?

皮承基
2023-03-14

我试图执行批处理插入与数据,目前正在插入到DB每个事务一个语句。事务代码语句看起来类似于下面。目前,对来自外部提要的每个引用都调用addHolding()方法,每个引用更新大约每秒发生150次。

public class HoldingServiceImpl {

    @Autowired
    private HoldingDAO holdingDao;

    @Transactional(propagation = Propagation.REQUIRES_NEW, rollbackFor = Exception.class)
    public void addHolding(Quote quote) {
        Holding holding = transformQuote(quote);
        holdingDao.addHolding(holding);
    }

}

DAO正在从HibernateSessionFactory获取当前会话,并在对象上调用save。

public class HoldingDAOImpl {

    @Autowired
    private SessionFactory sessionFactory;

    public void addHolding(Holding holding) {
        sessionFactory.getCurrentSession().save(holding);
    }

}

我已经看了Hibernate批处理留档,但是从文档中不清楚在这种情况下我将如何组织批处理插入的代码,因为我手头没有完整的数据列表,而是在等待它流式传输。

仅仅在属性文件中设置Hibernate批处理属性(例如,Hibernate.jdbc.batch_size=20)“神奇地”批量插入这些属性吗?或者说,我需要在同步列表中捕获每个报价更新,然后在达到批量大小限制时插入列表加载和清除列表?

此外,实现批处理的全部目的是查看性能是否有所提高。如果在这种情况下有更好的方法来处理插入,请告诉我。

共有1个答案

李谦
2023-03-14

设置属性hibernate。jdbc。batch_size=20表示Hibernate在20之后刷新对象。在您的情况下,hibernate会自动调用sessionfactory。保存20条记录后刷新()。

当你调用会话工厂时。save(),insert命令仅对内存中的hibernate缓存触发。只有在调用Flush之后,hibernate才会将这些更改与数据库同步。因此,设置hibernate批大小就足以执行批插入。根据需要微调批量大小。

还要确保您的交易得到正确处理。如果提交事务,也会强制Hibernate刷新会话。

 类似资料:
  • 问题内容: 有没有解决方案通过hibernate在分区后的PostgreSQL表中批量插入?目前我遇到这样的错误… 我已经找到此链接http://lists.jboss.org/pipermail/hibernate- dev/2007-October/002771.html, 但我在网上找不到任何地方可以解决此问题或如何解决该问题 问题答案: 您可能想通过设置hibernate.jdbc.fac

  • 我很难让Hibernate在MySQL上执行大容量插入。 我有要排序的主键生成类型,下面是我的dao.xml 这使得每次都可以执行单个查询。我也相应地刷新和清除实体管理器。 技术堆栈:Spring 4,Hibernate 5.2。 编辑1:我也浏览了下面的链接,但没有运气 https://vladmihalcea.com/how-to-batch-insert-and-update-stateme

  • 我正在使用hibernate jpa执行批处理更新。 更新:我得到了解决方案:问题是我正在刷新已经刷新的事务,因此它没有给我任何事务正在进行中的错误以及我上面发布的错误,所以我只是删除了`getem().flush();和getEm().clear();从finally块开始工作:)

  • H全部, 如果有人有任何经验的kafka-spark流对处理各种数据,请给我一个简短的细节,如果这是一个可行的解决方案,并比有两个不同的管道更好。 提前道谢!

  • 问题内容: 我如何创建一个CI批处理插入数组,就像 从我的正常数组是 问题答案: 尝试这个: 欲了解更多信息,请点击这里

  • 问题内容: 我有一个数据模型,该数据模型在一个实体和其他11个实体之间具有一对多关系。这12个实体一起代表一个数据包。我遇到的问题是与这些关系的“许多”方面发生的插入次数有关。其中一些可以具有多达100个单独的值,因此要将一个完整的数据包保存在数据库中,最多需要500次插入。 我正在将MySQL 5.5与InnoDB表一起使用。现在,通过测试数据库,我发现在处理批量插入时,它每秒可以轻松地每秒进行