我的弹簧服务中的代码片段
更新现有记录
//Credit Cards
find.getCreditCards().forEach(creditCard -> {
creditCard.setActiveVersion(false);
businessPartnerCreditCardRepository.save(creditCard);
});
然后插入新的 1
//Credit Cards
businessPartner.getCreditCards().forEach(creditCard -> {
creditCard.setVersion(find.getVersion() + 1);
creditCard.setActiveVersion(true);
businessPartnerCreditCardRepository.save(creditCard);
});
问题是,Spring JPA 首先运行 INSERT 语句,然后运行UPDATE,而不是先运行UPDATE然后运行 INSERT。
为什么我需要从更新到插入的某些顺序
存在一个数据库约束,即一次只有 1 条记录处于活动状态。 所以,当 JPA 插入而不更新时.DB大喊大叫和回扣..... :D
任何更新 ?
更新后进行刷新。
您可以使用 JpaRepository 中的saveAndFlush
,也可以在存储库中编写自定义方法,在其中注入 EntityManager 并对其执行刷新。
另一种选择是将约束设置为延迟约束,以便仅在事务结束时检查它。