我的网络服务获取要在数据库上添加的数据列表。
要写入的表包含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行。你能帮我理解为什么吗?
答案 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);
}