如何解决Spring Boot JPA一次一次更新多个实体
我需要更新所有按ID过滤的实体,我可以对单个实体执行此操作,并且可以正常工作,但是如何对多个实体执行此操作。
这是一次一对一更新的成功示例
@Override
public FullPack updatePack(FullPack fullPack,int id) {
FullPack newFullPack = fullPackRepository.findByPackId(id);
newFullPack.setPackCompose(fullPack.getPackCompose());
newFullPack.setPackSequence(fullPack.getPackPackSequence());
FullPack savedFullPack = fullPackRepository.save(newFullPack);
return savedFullPack;
}
假设我将基于findByPackId获得多个FullPack,然后如何更新所有
@Override
public List<FullPack> updatePack(FullPack fullPack,int id) {
List<FullPack> newFullPack = fullPackRepository.findByPackId(id);
//////////////////
/////////////////
}
我该如何做这种情况
解决方法
使用for循环迭代列表:
@Override
public List<FullPack> updatePack(FullPack fullPack,int id) {
List<FullPack> newFullPackList = fullPackRepository.findByPackId(id);
for (FullPack newFullPack : newFullPackList) {
newFullPack.setPackCompose(fullPack.getPackCompose());
newFullPack.setPackSequence(fullPack.getPackPackSequence());
}
fullPackRepository.saveAll(newFullPackList);
return newFullPackList;
}
,
使用JPA时,并非在所有存储库接口中,大多数都公开了.saveAll()
方法,该方法为您打开保存集合的路径。
您可以像这样简单地保存多个FullPack。
@Override
public List<FullPack> updatePack(FullPack fullPack,int id) {
List<FullPack> newFullPack = fullPackRepository.findByPackId(id);
...
fullPackRepository.saveAll(newFullPack)
}
,
您可以使用存储库
@Query("update OrdineMacchina o set o.durataEsecuzione = o.durataEsecuzione + :incremento where o.idOrdineMacchina = :idOrdineMacchina")
@Modifying
void updateDuration(@Param("idOrdineMacchina") Long idOrdineMacchina,@Param("incremento") Integer incremento);
不要忘记@Modifing。您必须@autowire需要更新的存储库。 您可以使用JPQL或本地查询来编写查询。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。