java - 在 jpa CRUD 存储库中保存和更新
问题描述
我已经根据我的存储库和服务将一个数据保存在我的数据库中。我想通过仅更改玩家 ID 来使用邮递员保存另一个数据。但它不会创建新的实体数据。它会更新现有的实体数据。我的问题是我的服务在找到现有 id 时如何更新数据。但是当它找到新 id 时,它会将新数据保存到数据库中。
这是我的回购:
@Repository
@Transactional
public interface CricketPlayerRepository extends CrudRepository<CricketPlayer,String> {
Optional<CricketPlayer> findCricketPlayerByName(String name);
}
这是我的服务:
@Service
public class CricketPlayerService {
private CricketPlayerRepository cricketPlayerRepository;
public CricketPlayerService(CricketPlayerRepository cricketPlayerRepository) {
super();
this.cricketPlayerRepository = cricketPlayerRepository;
}
public CricketPlayerService() {
}
public Optional<CricketPlayer> getPlayerByName(String name){
return cricketPlayerRepository.findCricketPlayerByName(name);
}
public CricketPlayer save(CricketPlayer cricketPlayer){
Optional<CricketPlayer> id = cricketPlayerRepository.findById(cricketPlayer.getPlayerId());
if (id.isPresent()){
//code here
}
// if (entityManager.isNew(cricketPlayer)) {
// em.persist(cricketPlayer);
// return cricketPlayer;
// } else {
// return em.merge(cricketPlayer);
// }
return cricketPlayerRepository.save(cricketPlayer);
}
public Iterable<CricketPlayer> findAllPlayers() {
return cricketPlayerRepository.findAll();
}
public Optional<CricketPlayer> findPlayersById(String id) {
return cricketPlayerRepository.findById(id);
}
}
解决方案
hibernate(和其他框架)中的保存和更新操作基于 id 值。如果存在 id 则合并(更新)实体,否则保存新实例。所以在这种情况下是做不到的。
推荐阅读
- machine-learning - 深度神经网络模型在一个 epoch 后停止学习
- batch-file - 无明显原因关闭批处理文件
- python - 如何在tensorflow中重用操作?
- python - 具有实际环境而不是 python 类环境的 TensorFlow 代理
- apache-kafka - 删除 Kafka/log 旧文件是否安全?
- python - 如何让我的函数在以下代码中在 tkinter 中配置正确的标签?
- javascript - 如何自动化应用程序脚本中的特定范围
- java - 错误:不兼容的类型:从 double 到 float 的可能有损转换
- ios - 如何从 Swift 包管理器清单文件加载文件并运行 swift 代码?
- mongodb - Strapi mongo颤振应用程序连接错误