0

团队,

我面临一个与休眠有关的奇怪问题。我看到很多删除发生的地方。

例如,当我在代码预期下运行时,它会从 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();
        }

    }

但是,当我们启用显示 SQL 时,会发生“N”次删除,并且在所有插入之后似乎是按顺序进行的。

我在 tx.commit() 上保留了一个调试器,以下是 Show-sql 的输出代码

例如,它似乎正在无限循环中使用相同的语句集。

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

4

1 回答 1

0

你确定它会无限循环吗?好吧,您之前不需要flushclear会话,休眠将以同步方式触发查询,它只会先删除您的记录,然后再插入新记录。放置flushclear声明后commit

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

于 2013-09-05T09:39:24.907 回答