我正在编写一个脚本,使用hibernate将记录从文件加载到mysql DB中。我正在使用事务处理批量处理1000条记录,如果记录已经存在于数据库中,则插入将失败,这实际上会使整个事务回滚。是否有办法知道回滚事务中处理了哪些记录?
另外,考虑到这种情况,还有更好的方法吗?请注意,该脚本每天运行一次,而不是一次性加载,该文件通常每天大约有2.5亿条记录。
最佳答案
您可以使用StatelessSession
API并检查ConstraintViolationException
。您可以丢弃故障记录而无需回滚事务。