队
我正面临着一个与hibernate有关的奇怪问题。在那里我看到很多删除事件。
例如,当我在代码期望下运行时,它会从EMPLOYEE表中删除数据,然后进行批量插入。
Session session = null;
Transaction tx = null;
try {
session = sessionFactory.openSession();
tx = session.beginTransaction();
String stringQuery = "DELETE FROM Employee";
Query query = session.createQuery(stringQuery);
query.executeUpdate();
session.flush();
session.clear();
Employee employee = null;
for (int i = 0; i < employeeList.size(); i++) {
Employee = employeeList
.get(i);
session.save(employee);
}
tx.commit();
}
catch (Exception e) {
if (tx != null)
tx.rollback();
}
finally {
if (session != null) {
session.close();
}
}
但是当我们启用show SQL时,会发生“N”次删除,并且似乎在所有插入之后依次进行。
我在tx.commit()上保留了一个调试器,以下是Show-sql的输出代码
e.g。它似乎在无限循环中使用相同的语句集。
从员工中删除
插入员工价值
从员工中删除
插入员工价值
从员工中删除
插入员工价值
答案 0 :(得分:0)
你确定它会无限循环吗?而且你以前不需要flush
和clear
会话,hibernate将以同步方式触发查询,只会先删除你的记录,然后再插入新的记录。在flush
clear
和commit
语句
还有一件事你不需要迭代循环并逐个插入记录,你可以使用saveOrUpdateAll
方法批量插入记录。