私のコードでは、バッチ挿入を行っています。たとえば、挿入する行が 5 つあり、そのうちの 1 つが挿入に失敗したとします。次に、休止状態ですべての行が挿入されないようにします。
私の場合、エラーを含まない他の 4 つのレコードを挿入したいと考えています。これは休止状態で可能ですか?
以下は私のコードの簡略版です。
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();
}
}
I さて、あと2つ質問があります。
- 上記のように複数のセッション オブジェクトを作成しても問題ありませんか? (私は100000以上のレコードを持っています。)
flush()
上記のように、clear()
およびclose()
メソッドを呼び出す必要がありますか?