私の Web サービスは、DB に追加するデータのリストを取得します。
書き込み対象のテーブルには : が含まれてい3 fields
ます(id,userId,contactId)
。DB(userId,contactId)
ではunique key
.
重複した値(userId,contactId)
が Web サービスによって取得された場合、Java 側で例外を処理し、重複した例外が発生した場合にも残りのレコードを追加する必要があります。
ここで私が使用しているコード。
Session session = HibernateUtil.getSessionFactory().openSession();
Transaction transaction = null;
try {
transaction = session.beginTransaction();
for (int i=0; i<contactsToAdd.size(); ++i)
{
Contact contact = new Contact(userId, contactsToAdd.get(i));
try
{
session.saveOrUpdate(contact); // line 11
session.flush();
}
catch (HibernateException e)
{
transaction.rollback(); // line 16
// e.printStackTrace();
}
finally
{
session.clear(); // line 21
}
}
transaction.commit();
return true;
}
catch (HibernateException e) {
transaction.rollback(); // line 29
e.printStackTrace();
}
finally {
session.close(); // line 33
}
- = 0 の場合
i
、11、12、16、21 行が実行されます。 - = 1 の場合
i
、11、12、16、21、29、30、33 行が実行されます。
理由を理解していただけますか?