批量插入时,某一行出错时如何继续插入其他行

2023-12-09

在我的代码中,我正在执行批量插入。举个例子,我有五行要插入,其中一行在插入时失败。然后休眠阻止插入所有行。
就我而言,我想插入其他四个不包含错误的记录。这在休眠中可能吗?
以下是我的代码的简化版本。

void save() {
  Session session1 = HibernateUtil.getSessionFactory().openSession();
  Transaction transaction = session1.beginTransaction();

  for (int i = 0; i < 5; i++) {
    BatchSizeConf r = new BatchSizeConf();//This is my entity
    r.setId(i);
    r.setDispatchType("Disp");
    r.setBatchSize(500);
    Serializable z = session1.save(r);
    System.out.println(z);//prints ids
  }

  session1.flush();
  session1.clear();
  session1.getTransaction().commit();
  session1.close();
}

EDIT:


According to following answers below I changed my code and solved my main problem. Now my code is like this.
void save() {
  for (int i = 0; i < 5; i++) {
    Session session1 = HibernateUtil.getSessionFactory().openSession();
    Transaction transaction = session1.beginTransaction();

    BatchSizeConf r = new BatchSizeConf();//This is my entity
    r.setId(i);
    r.setDispatchType("Disp");
    r.setBatchSize(500);

    try {
      session1.save(r);
      transaction.commit();
    } catch (HibernateException e) {
      System.out.println("Failed: " + i);
    }

    session1.flush();
    session1.clear();
    session1.close();
  }
}

我现在还有两个问题。

  1. 像上面那样创建多个会话对象可以吗? (我有超过100000条记录。)
  2. 我需要打电话吗flush(), clear() and close()方法如上?

你可以做这样的事情

Transaction tx = session.beginTransaction();
...
for (BatchSizeConf  b: BatchSizeConfList) {
    ...
    tx.commit();
}

Refer 避免交易异常

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

批量插入时,某一行出错时如何继续插入其他行 的相关文章

随机推荐