-1

私の 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 行が実行されます。

理由を理解していただけますか?

4

1 に答える 1

0

Contact が 2 つの関連フィールドに Equals と Gethashcode を実装すると仮定します。

Set<Contact> contacts = ...;
for (int i=0; i<contactsToAdd.size(); ++i)
{
    contacts.Add(new Contact(userId, contactsToAdd.get(i)));
}

for (Contact contact in contacts)
{
    Session.Save(contact);
}
于 2012-06-21T06:10:27.583 に答える