具有唯一键约束的JPA Repository.save

时间:2017-07-31 10:18:20

标签: java postgresql hibernate spring-boot spring-data-jpa

我正在使用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

我的问题是:

  1. 当我们使用JPA插入数据库时​​,我们如何处理重复项?

  2. 使用foreach语句时,如果一个repository.save失败,它会执行foreach中的下一个项目还是停止在那里完成执行?

  3. 提前感谢您的帮助。

0 个答案:

没有答案
相关问题