Java Spring Boot JPA一次一对多更新多个实体
我需要更新所有按ID过滤的实体,我可以对单个实体执行此操作,它工作正常,但如何对多个实体执行此操作 下面是一对一更新的成功示例Java Spring Boot JPA一次一对多更新多个实体,java,spring,spring-boot,hibernate,jpa,Java,Spring,Spring Boot,Hibernate,Jpa,我需要更新所有按ID过滤的实体,我可以对单个实体执行此操作,它工作正常,但如何对多个实体执行此操作 下面是一对一更新的成功示例 @Override public FullPack updatePack(FullPack fullPack, int id) { FullPack newFullPack = fullPackRepository.findByPackId(id); newFullPack.setPackCompose(fullPack.getPackCompose(
@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的多个完整包,那么如何更新所有完整包
@Override
public List<FullPack> updatePack(FullPack fullPack, int id) {
List<FullPack> newFullPack = fullPackRepository.findByPackId(id);
//////////////////
/////////////////
}
如何使用JPA实现这种情况,并非所有存储库接口中的大多数都会公开一个.saveAll方法,该方法为您打开保存集合的路径 您可以像这样简单地保存多个FullPack
@Override
public List<FullPack> updatePack(FullPack fullPack, int id) {
List<FullPack> newFullPack = fullPackRepository.findByPackId(id);
...
fullPackRepository.saveAll(newFullPack)
}
对于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);
不要预测@modifying。您必须@autowire需要更新的存储库。
您可以用JPQL或本机查询编写查询。您可以使用存储库编写查询
@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);
不要预测@modifying。您必须@autowire需要更新的存储库。
您可以用JPQL或本机查询编写查询。使用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;
}
使用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;
}
是否要为所有fullPack更新相同的数据?是的,我需要为所有fullPack添加相同的数据。一对多映射更新所有使用循环并使用saveAll进行列表更新如果您可以添加代码部分,这将非常棒,我有点困惑。我的想法类似于回答您想要为所有fullPack更新相同的数据?是的,我需要为所有fullPack添加相同的数据。一对多映射更新所有使用循环并使用saveAll进行列表更新如果您可以添加代码部分,那将非常棒,我有点困惑。我的想法类似于Answer我认为这没有任何意义,您将获得fullPack的列表并使用它做任何事情,我的意思是,您正在保存从数据库检索到的同一对象,并且没有对其进行更改。看起来像是贝茨·诺伯特的答案,但你的答案不完整!。现在,它更好了,但仍然是相同的代码。哈哈,这没关系,因为开发人员可以使用stream,`method,任何东西来迭代这些信息。我只是简单地指向spring Database提供的saveAll repository方法。我认为这没有任何意义,你可以得到fullPack的列表,并用它做任何事情,我的意思是,您正在保存从数据库检索到的同一对象,并且没有对其进行更改。看起来像是贝茨·诺伯特的答案,但你的答案不完整!。现在,它更好了,但仍然是相同的代码。哈哈,这没关系,因为开发人员可以使用stream,`method,任何东西来迭代这些信息