我正在使用JPA插入我的POSTGRES数据库。我最近在其中一个表上添加了一个唯一键约束。该表如下所示:
______________________________________________
|Id| Action| Actor| Assignee| Date| Team|
----------------------------------------------
Id是主键,Action,Actor,Assignee和Date的组合是唯一键。当我从第三方API获取JSON对象时,我使用以下方法将数据保存到数据库中。
streamItemArray.parallelStream().forEach(streamItem -> {
try{
streamItemRepository.save(streamItem);
}catch(ConstraintViolationException e){
System.out.println("Issue with unique key");
System.out.println(e.getMessage());
}
catch (Exception e){
System.out.println("others");
System.out.println(e.getMessage());
}
});
代码运行了最初几次,现在它根本没有运行。
2017-07-31 15:14:04.811 WARN 7867 --- [nio-8080-exec-4] o.h.engine.jdbc.spi.SqlExceptionHelper : SQL Error: 0, SQLState: 23505
2017-07-31 15:14:04.812 ERROR 7867 --- [nio-8080-exec-4] o.h.engine.jdbc.spi.SqlExceptionHelper : ERROR: duplicate key value violates unique constraint "Unique_key"
Detail: Key (action, actor, assignee, date)=(Dismissed, Karen William, Karen William, 2017-07-21 01:19:05 IST) already exists.
2017-07-31 15:14:04.812 INFO 7867 --- [nio-8080-exec-4] o.h.e.j.b.internal.AbstractBatchImpl : HHH000010: On release of batch it still contained JDBC statements
others
could not execute statement; SQL [n/a]; constraint [Unique_key]; nested exception is org.hibernate.exception.ConstraintViolationException: could not execute statement
我的问题是:
当我们使用JPA插入数据库时,我们如何处理重复项?
使用foreach语句时,如果一个repository.save失败,它会执行foreach中的下一个项目还是停止在那里完成执行?
提前感谢您的帮助。