我需要插入一個目的是具有像多個嵌套對象數據庫: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?這可能會爲比較方法提供一個更好的平臺。 –