当前位置: 首页 > 面试题库 >

休眠关系映射/加速批处理插入

洪飞驰
2023-03-14
问题内容

我有5个MySQL
InnoDB表:Test,InputInvoice,InputLine,OutputInvoice,OutputLine每个表都在Hibernate中映射并起作用。我玩过使用StatelessSession
/ Session和JDBC批处理大小。我删除了任何生成器类,以使MySQL处理id生成-
但它的执行速度仍然很慢。这些表中的每一个都在java类中表示,并相应地在hibernate中进行映射。当前,当需要将数据写出时,我遍历对象并执行一个session.save(Object)session.insert(Object)如果正在使用StatelessSession)。当行数达到最大jdbc批处理大小(50)时,我还会进行刷新和清除(使用Session时)。

  1. 如果将它们放在一个“父”类中来容纳对象并执行一个session.save(master)而不是每个对象,会更快吗?
  2. 如果我将它们放在主/容器类中,我该如何将它们映射到休眠状态以反映这种关系?容器类实际上不是它自己的表,而是一个全部基于两个索引run_id(int)和line(int)的关系。
  3. 另一个方向是:如何让Hibernate进行多行插入?

问题答案:

对我来说,最终的html" target="_blank">解决方案是将voetsjoeba的回答作为出发点。我的休眠配置使用以下选项:

hibernate.order_inserts = true
hibernate.order_updates = true
  • 我从Session改为 StatelessSession

  • 重新排序Java代码以一次处理一个表中的所有元素。因此,所有表x,然后是表y,依此类推。

  • <generator>从每个类中删除了。Java现在创建它并将其分配给对象

  • 创建的逻辑使我能够确定是否仅设置了一个ID,而不是将“空”行写入数据库

  • 最后,我在dynamic-insert 类的休眠定义中打开了我的类,如下所示:<class name="com.my.class" table="MY_TABLE" dynamic-insert="true">



 类似资料:
  • 问题内容: 我有5个MySQL InnoDB表:每个表都在Hibernate中映射并起作用。我玩过使用StatelessSession / Session和JDBC批处理大小。我删除了任何生成器类,以使MySQL处理id生成- 但它的执行速度仍然很慢。这些表中的每一个都在java类中表示,并相应地在hibernate中进行映射。目前,当需要将数据写出时,我遍历对象并执行一个(如果正在使用State

  • 问题内容: 我有一个dao,它基本上使用hibernate将记录插入到一​​个表中,该dao用标记为注释,并且我有一个服务,该服务会生成其他一些东西,然后调用我的dao。我的服务也标注了使用。 我叫服务循环。我在dao上的插入内容是否可以批量或一个接一个地工作?我如何确定它们可以批量工作?hibernateTransaction Manager是否管理批处理插入? 我正在使用Oracle DB。

  • 问题内容: 我需要预先将没有实现接口的枚举映射到现有数据库,该数据库使用将该枚举存储在与所有者类相同的表中。 在这种情况下应如何处理映射?持久化到数据库不会改变,因为实现该接口的所有枚举都将具有不同的值,但是我不确定应如何从数据库中检索对象(我是否需要自定义映射器,它将尝试实例化一个使用指定的enum类进行枚举吗?Hibernate是否本身支持此功能?)。 问题答案: 可以创建一个自定义(例如th

  • 问题内容: Hibernate提供的注释支持使用或两种类型的映射。当我们使用映射时,它使用的“名称” 而不是Enum 的表示形式。在数据库列仅包含一个字符的情况下,这是一个问题。例如,我有以下枚举: 当我坚持枚举使用,即休眠尝试在数据库中存储的值是开放的。但是,我的数据库列仅包含一个字符,因此会引发异常。 克服这个问题的一个办法是改变枚举类型持有单个字符(如,代替,)。但是,这降低了可读性。有什么

  • 问题内容: 这是我在阅读有关jpa批量插入的几个主题之后创建的简单示例,我有2个持久对象User和Site。一个用户可以拥有多个站点,因此我们在这里有一对多的关系。假设我要创建用户并将多个站点创建/链接到用户帐户。考虑到我愿意为Site对象使用批量插入,代码如下所示。 但是,当我运行此代码时(我将hibernate方式用作jpa实现提供程序),我看到以下sql输出: 所以,我的意思是“真实的”批量

  • 问题内容: 我有一个颜色枚举 我有包含它的MyEntity。 我已经有一个UserType来映射我的枚举。 您知道如何在Hibernate hbm.xml中映射枚举集吗? 我需要一个UserType还是最简单的方法? 谢谢 编辑: 只是为了说明一下,我正在寻找 hbm.xml 配置而不是@CollectionOfElements注释 问题答案: 我使用EnumSet映射线程中的解决方案,该解决方案