Hibernate问题删除整个表然后批量插入

时间:2013-09-05 09:16:23

标签: hibernate

我正面临着一个与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。它似乎在无限循环中使用相同的语句集。

从员工中删除
插入员工价值
从员工中删除 插入员工价值
从员工中删除 插入员工价值

1 个答案:

答案 0 :(得分:0)

你确定它会无限循环吗?而且你以前不需要flushclear会话,hibernate将以同步方式触发查询,只会先删除你的记录,然后再插入新的记录。在flush

之后添加clearcommit语句

还有一件事你不需要迭代循环并逐个插入记录,你可以使用saveOrUpdateAll方法批量插入记录。