Hebernate-hql 插入一條 和 批量插入多條記錄
阿新 • • 發佈:2019-02-09
插入一條 和 批量插入多條記錄
注意關閉session的二級快取:
在 hibernate.cfg.xml 中設定
<property name="hibernate.cache.use_second_level_cache">false</property>
//插入一條記錄
public void testcaseInsert(Testcasebpel t){
Session session = getSession();
Transaction tran = session.beginTransaction();
session.save(t); //執行
tran.commit(); //提交
session.close();
}
//批量插入,此處是插入一個Map
public void testcaseInterAll(Map<Testpathbpel, ArrayList> testCaseListMap){
Session session = getSession();
Transaction tran = getSession().beginTransaction();
int i=0;
boolean flag = false; //記錄要插入的資料是否超過20條
if(testCaseListMap.size()>20){
flag = true;
}
for (Map.Entry<Testpathbpel, ArrayList> en: testCaseListMap.entrySet()) {
ArrayList list = en.getValue();
for (Object obj : list) {
String str =(String)obj;
//得到測試路徑對應的id
Testpathbpel tpath = en.getKey();
//插入測試用例
Testcasebpel tcase = new Testcasebpel();
tcase.setTestpathbpel(tpath);
tcase.setTestcase("("+str+")");
session.save(tcase); //執行
i++;
//手動將Session處的快取資料寫入資料庫,並手動提交事務
if (i % 20 == 0){ //超過20條,每20條提交1次,注意要關閉session的二級快取
session.flush();
session.clear();
tran.commit();
tran = session.beginTransaction();
}
}
}
if(flag == false) //未超過20條,最後提交1次
tran.commit();
session.close();
}