我需要插入一个目的是具有像多个嵌套对象数据库:Mysql的复杂对象休眠批量插入
class A{
List<B> b;
}
class B{
List<C> c;
List<D> d;
List<E> e;
}
现在,我将有A的一个单独的对象,以持续,这将具有类型B的多个对象而B又将有多个C,D和E类型的对象。
总共可以有10000个B,C,D和E组合的对象。我已经配置使用下面的补充批量插入到我的hibernate.cfg.xml
<property name="hibernate.jdbc.batch_size">50</property>
<property name="hibernate.order_inserts">true</property>
<property name="hibernate.order_updates">true</property>
<property name="hibernate.jdbc.batch_versioned_data">true</property>
我还处于休眠的connection.url属性添加
rewriteBatchedStatements=true
。
我正在使用递增生成器的id。 我将收到A的JSON以及B的嵌套列表,并且在每个B元素中嵌套C,D和E。这被转换成一个对象,并使用
session.save(A);
因为,我已经启用级联保存到数据库中,所有的嵌套的对象持久化到数据库。 10,000个物体的总插入时间大约需要25秒。 如果配料启用或不是因为我看到这样
insert into C(id, val) values(1,"val");
insert into C(id, val) values(2,"val2");
单一插入语句我提到了hibernate batch insert doc我不知道,它要求我
session.flush();
session.clear();
JDBC批量插入之后。我不知道我如何在我的情况下做到这一点,我也尝试使用无状态会话,我也没有看到任何改进。任何关于如何提高性能的建议都会很棒。
并不真正帮助男人,事实上,它比之前慢了2-3秒 – gameOne
您是否比较过每种情况下执行的SQL?这可能会为比较方法提供一个更好的平台。 –