1

我有一个在几个字段上具有独特约束的 oracle 表。我正在编写一段代码以将数据从大型 excel 文件(通常为数千行)导入该表。整个导入必须在一个事务中进行。

可能会发生在数千行中会有一两行重复。所以我需要忽略 SQLIntegrityConstraintViolationException 并继续插入所有其他行。我只需要向用户显示第 123 行是重复条目的消息。

我正在逐行读取excel文件(基于Apache POI事件),每一行都映射到休眠POJO并立即保存:

public void saveRow( ExcelRow row) {
  TableRow tableRow = new TableRow(row);
  //some logic goes here
  this.session.save(tableRow);
}

我试图用 session.save 包围 session.save

try{
    session.save(tableRow);
}catch(SQLIntegrityConstraintViolationException e)
{
    //push the error message and continue
}

但是 Netbeans 哭了exception SQLIntegrityConstraintViolationException is never thrown in body of corresponding try statement

如何捕获并忽略完整性异常以继续处理数据?

我宁愿不必再执行 10K 选择来检查是否存在类似的行。

4

1 回答 1

1

Hibernate 将 SQL 异常包装在它自己的异常堆栈中,通常是 a org.hibernate.HibernateException,它是 a RuntimeException。您可以捕获它,或者如果您知道这将违反约束,请尝试捕获ConstraintViolationException.

于 2013-05-23T14:14:57.883 回答