gpt4 book ai didi

java - 为什么 JPA Repository 保存方法不更新生产中的实体详细信息?

转载 作者:行者123 更新时间:2023-12-05 08:36:49 24 4
gpt4 key购买 nike

我正在使用 spring data 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();

}

最佳答案

问题是 count

may choose to not execute the stream pipeline (either sequentially or in parallel) if it is capable of computing the count directly from the stream source. In such cases no source elements will be traversed and no intermediate operations will be evaluated. Behavioral parameters with side-effects, which are strongly discouraged except for harmless cases such as debugging, may be affected

而这正是您的情况。解决方案是根本不使用 mapcount,因为您不需要/将它们用于它们应该用于的用途,而是使用单个 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);
});
}

请注意,您可以使用 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);
};
}

关于java - 为什么 JPA Repository 保存方法不更新生产中的实体详细信息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67667904/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com