如何使用Hibernate处理重复记录

时间:2012-06-16 22:05:07

标签: java hibernate duplicates try-catch

我的网络服务获取要在数据库上添加的数据列表。

要写入的表包含3 fields(id,userId,contactId)。在数据库(userId,contactId)上是unique key

如果Web服务检索到重复的值(userId,contactId),我需要在java端处理异常,并在引发重复异常的情况下继续添加其余记录。

Here我正在使用的代码。

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行。

你能帮我理解为什么吗?

1 个答案:

答案 0 :(得分: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);
}