Java 如何使用Hibernate处理重复记录

Java 如何使用Hibernate处理重复记录,java,hibernate,duplicates,try-catch,Java,Hibernate,Duplicates,Try Catch,我的web服务获取要添加到DB上的数据列表 要写入的表包含3个字段:(id、userId、contactId)。DB上的(用户ID、联系人ID)是一个唯一键 如果web服务检索到一对重复的值(userId,contactId),我需要在java端处理异常,如果引发重复的异常,还需要继续添加剩余的记录 我正在使用的代码 Session session = HibernateUtil.getSessionFactory().openSession(); Transaction transaction

我的web服务获取要添加到DB上的数据列表

要写入的表包含
3个字段
(id、userId、contactId)
。DB上的
(用户ID、联系人ID)
是一个
唯一键

如果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
}
会话会话=HibernateUtil.getSessionFactory().openSession(); 事务=空; 试一试{ 事务=session.beginTransaction();
对于(int i=0;i假设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);
}
设置联系人=。。。;

对于(inti=0;iit最好将相关代码与问题内联发布,而不是发布一些外部站点,在这些站点中,相关代码最终会消失,使问题对未来的访问者毫无用处!