spring-data-jpa - 如何正确更新集合?
问题描述
这是我尝试过的:
public Collection<User> updateUsers(Collection<User> users) {
Collection<User> usersUpdated = null;
users.stream()
.filter(u -> userRepository.existsById(u.getId()))
.forEach(
u -> {
Optional<User> user = userRepository.findById(u.getId());
userRepository.save(user);
usersUpdated.add(userRepository.findById(u.getId()));
logger.debug("Update single " + User.class.getName() + ": " + u);
}
);
return usersUpdated;
}
问题在于userRepository.save(user)
我在哪里得到以下信息:
Inferred type 'S' for type parameter 'S' is not within its bound; should extend 'com.example.model.User'
我应该如何正确更新该实体的集合?
解决方案
您将收到“推断类型不在其绑定范围内”异常,因为您将 an 传递Optional
给save
方法,而不是User
对象。
我建议您可以使用 向数据库发送一个请求来保存整个集合CrudRepository.saveAll()
,如下所示:
userRepository.saveAll(users);
推荐阅读
- amazon-web-services - 使用 AWS Elastic Beanstalk 我应该在哪里存储我的应用程序代码?
- php - 将 uniqueidentifier 存储到 php 变量中,然后将变量作为 uniqueidentifier 插入
- docker - Docker-compose 不会 snyc 或将更改应用到 docker 容器
- angular - Angular 7 - 将 #parameter="ngModel" 输入作为动态名称
- ionic3 - 如何在 ion-fab-list 中不断设置 ion-fab-buttons 顺序
- typescript - 如何创建一个接口成为另一个接口的子集?
- react-native - 在 Reducer 中状态更改后未调用 mapStateToProps
- ionic-framework - Ionic 3 中的键盘上推内容
- mysql - 使用 Inner Join 在 SQL 中查找我们关闭/赢得的机会的百分比是入站还是出站
- command-line - 是否可以使用 linux 命令行组合多个数组?