我正在使用 spring 数据 JPA 我正在尝试使用 JPARepository 方法 save() 更新实体以更新实体详细信息。我编写的用于更新实体的代码在开发中按预期工作正常。但是相同的代码在生产服务器上不起作用它不会给出任何错误,只有在 map() 中编写的代码不起作用。下面是我的代码
public Long updateQrCodeUrlByBusinessDetails(Long businessId, String menuUrl, MENU_TYPE menuType) {
return qrCodeRepo.findByBusinessId(businessId).businessQrCode.stream().map(qr -> {
qr.setMenuUrl(menuUrl);
qr.setMenuType(menuType);
return qrCodeRepo.save(qr);
}).count();
}
Run Code Online (Sandbox Code Playgroud)
问题是 count
如果能够直接从流源计算计数,则可以选择不执行流管道(顺序或并行)。在这种情况下,不会遍历源元素,也不会评估中间操作。强烈建议不要使用具有副作用的行为参数,除了调试等无害情况外,可能会受到影响
而这正是发生在你的情况。解决的办法是既不使用map或者count根本,因为你不需要做/用他们什么,他们都应该被用于,而是使用一个单一的forEach,而不是:
public void updateQrCodeUrlByBusinessDetails(Long businessId, String menuUrl, MENU_TYPE menuType) {
List<BusinessQRCode> businessQrCode = qrCodeRepo.findByBusinessId(businessId);
businessQrCode.stream().forEach(qr -> {
qr.setMenuUrl(menuUrl);
qr.setMenuType(menuType);
qrCodeRepo.save(qr);
});
}
Run Code Online (Sandbox Code Playgroud)
请注意,您可以使用 for 循环执行完全相同的操作,调用更少、行数相同,并且无需使用流:
public void updateQrCodeUrlByBusinessDetails(Long businessId, String menuUrl, MENU_TYPE menuType) {
List<BusinessQRCode> businessQrCode = qrCodeRepo.findByBusinessId(businessId);
for (BusinessQRCode qr : businessQrCode) {
qr.setMenuUrl(menuUrl);
qr.setMenuType(menuType);
qrCodeRepo.save(qr);
};
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
106 次 |
| 最近记录: |