【问题标题】:I'm using @UniqueConstraint in the below code.when im using saveall() method我在下面的代码中使用@UniqueConstraint。当我使用 saveall() 方法时
【发布时间】:2019-06-12 08:47:18
【问题描述】:

我在下面的代码中使用@UniqueConstraint。当我使用 saveall() 保存数据的方法,当约束违反第一次失败时 数据剩余值也没有保存。

   @Entity
    @Data
    @Table(uniqueConstraints = @UniqueConstraint(columnNames = { "tradeStartTime", "tradeEndTime", "contract" }))
public class TradingHours {
                @Id
                @GeneratedValue(strategy = GenerationType.IDENTITY)
                private Integer id;
                private ZonedDateTime tradeStartTime;
                private ZonedDateTime tradeEndTime;
                @ManyToOne
                @JoinColumn(name = "contract")
                private Contract contract;
}

【问题讨论】:

  • 您的问题是什么?能具体点吗?
  • 我使用 saveall() 方法保存有 150 条记录的数据。但是在我的第一个记录中,由于剩余的 149 条记录也没有保存,所以发生了违反约束的异常。我想无约束地保存剩余的记录违规
  • 好的,那么我的建议是您管理异常以便继续。所以我现在的独特想法是您创建一个基础存储库以覆盖saveAll(List<S> list),您可以从那里进行控制。你怎么看?

标签: spring spring-boot spring-data-jpa spring-transactions


【解决方案1】:

我认为事务失败后无法继续批量插入。如果您需要保存所有剩余的值,您应该将每个值分别保存在save() 方法中标记为@Transactional(propagation = Propagation.REQUIRES_NEW),看看docs。 您还必须在某处捕捉DataIntegrityViolationException,直到它破坏其他地方。

【讨论】:

    猜你喜欢
    • 2015-05-07
    • 2022-01-03
    • 2018-08-19
    • 2021-08-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-25
    • 1970-01-01
    相关资源
    最近更新 更多