首页 > 解决方案 > 在 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);
    }

}

标签: javahibernatespring-bootspring-data-jpacrud

解决方案


hibernate(和其他框架)中的保存和更新操作基于 id 值。如果存在 id 则合并(更新)实体,否则保存新实例。所以在这种情况下是做不到的。


推荐阅读