在我的代码中,我正在执行批量插入。例如,认为我有五行要插入,其中一个在插入时失败。然后休眠防止插入所有行。
就我而言,我想插入其他四个不包含错误的记录。这在 Hibernate 中可能吗?
以下是我的代码的简化版本。
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();
}
编辑:
根据下面的答案,我更改了代码并解决了我的主要问题。现在我的代码是这样的。
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();
}
}
我现在还有两个问题。
- 可以像上面那样创建多个会话对象吗?(我有超过 100000 条记录。)
- 我需要调用
flush()
,clear()
和close()
上述方法吗?