代码之家  ›  专栏  ›  技术社区  ›  SpringUser

如何决定何时更新、删除和插入

  •  0
  • SpringUser  · 技术社区  · 7 年前

    我使用spring data jpa创建服务。我必须在一个保存按钮上执行插入、更新和删除操作。为了保存和更新,我在代码中使用repository save方法。为了决定是否需要更新或插入,我正在检查记录计数。

    如果我发送一条记录,那么我就可以成功地执行保存和更新操作。

    但我的问题是当我发送两条已经存在的记录时 需要更新。但在我的情况下,我正在检查记录的计数,所以它是保存而不是更新。

    有谁能告诉我什么情况需要检查更多,然后它将去更新?或 告诉我什么时候更新,什么时候插入,什么时候删除?

    RoomInvestigatorMappingService类

    public String updatePiDetails(List<PiDetails> roomInvestMapping) {
    
        List<RoomInvestigatorMapping> currentRecord = new ArrayList<RoomInvestigatorMapping>();
        for (PiDetails inputRecorObj : roomInvestMapping) {
            currentRecord = roomInvestigatorMappingRepo.findByNRoomAllocationId(inputRecorObj.getnRoomAllocationId());
        }
        int currentRecordCount = currentRecord.size();
        int inputRecordCount = roomInvestMapping.size();
    
        // update existing record
        if (inputRecordCount == currentRecordCount) {
            for (PiDetails inputObject : roomInvestMapping) {
                for (RoomInvestigatorMapping currentRecordObj : currentRecord) {
                    currentRecordObj.nInvestigatorId = inputObject.getnInvestigatorId();
                    currentRecordObj.nPercentageAssigned = inputObject.getnPercentageAssigned();
                    currentRecordObj.nRoomAllocationId = inputObject.getnRoomAllocationId();
                    roomInvestigatorMappingRepo.saveAll(currentRecord);
                }
            }
        }
    
        //insert new record
        if (inputRecordCount > currentRecordCount) {
            for (PiDetails inputObject : roomInvestMapping) {
                RoomInvestigatorMapping investObj = new RoomInvestigatorMapping();
                investObj.nInvestigatorId = inputObject.getnInvestigatorId();
                investObj.nRoomAllocationId = inputObject.getnRoomAllocationId();
                investObj.nPercentageAssigned = inputObject.getnPercentageAssigned();
                roomInvestigatorMappingRepo.save(investObj);
            }
        }
        return "sucessfully";
    }
    

    RoomInvestigatorMappingRepository接口

    @Query("select roomInvestMapping from RoomInvestigatorMapping as roomInvestMapping where nRoomAllocationId=?1")
    List<RoomInvestigatorMapping> findByNRoomAllocationId(Integer nRoomAllocationId);
    

    JSON输入

    [
      {
        "nInvestigatorId": 911294,
        "nPercentageAssigned": 50,
        "nRoomAllocationId": 1
      },
      {
        "nInvestigatorId": 911294,
        "nPercentageAssigned": 50,
        "nRoomAllocationId": 2
      }
    ]
    
    1 回复  |  直到 7 年前
        1
  •  0
  •   Jens Schauder    7 年前

    只使用 CrudRepository.existsById(ID id)

    文件上说:

    返回具有给定ID的实体是否存在。