-1

我的 Web 服务获取要添加到数据库的数据列表。

要写入的表包含3 fields(id,userId,contactId)。在 DB(userId,contactId)上是一个unique key.

如果 Web 服务检索到重复的几个值(userId,contactId),我需要在 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
}
  • i= 0 时,执行第 11、12、16、21 行。
  • i= 1 时,执行第 11、12、16、21、29、30、33 行。

你能帮我理解为什么吗?

4

1 回答 1

0

假设 Contact 在两个相关字段上实现 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 回答