Hibernate——大量save()效率低下的解决方法
在用Hibarnate进行大量数据save时,速度会变得很慢,先举个例子如下:
主表-订单:order.hbm.xml
<set name="grnEntries" inverse="false" lazy="false" order-by="ID asc" cascade="all"><key><column name="GO_ENTRY_ID" /></key><one-to-many /></set>
<many-to-one name="godownEntry" outer-join="false" update="false" insert="false" fetch="select"column="GO_ENTRY_ID" not-null="false"></many-to-one>
insert into order values(...);
insert into entry values(...);insert into entry values(...);……
update entry set order_id = order.id where ...;update entry set order_id = order.id where ...;……
<set name="grnEntries" inverse="true" lazy="false" order-by="ID asc" cascade="all"><key><column name="GO_ENTRY_ID" /></key><one-to-many /></set>
<many-to-one name="godownEntry" outer-join="false" update="false" insert="true" fetch="select"column="GO_ENTRY_ID" not-null="false"></many-to-one>
IemiTemp iemiTemp = new IemiTemp();Set<IemiTempEntry> set = new HashSet<IemiTempEntry>();for (String s : str) {String[] arr = s.trim().split(",");for (String temp : arr) {IemiTempEntry entry = new IemiTempEntry();temp = temp.trim();if (temp == null || "".equals(temp)) {continue;}entry.setIemi(temp);//inverse="true" 手动配置主外键关系维护entry.setIemiTemp(iemiTemp);iemiTemp.getIemiTempEntrys().add(entry);set.add(entry);}}
iemiTempService.save(iemiTemp);