簡體   English   中英

如何在 Hibernate 中使用 REST API 刪除多個記錄

[英]How do I delete multiple records using REST API in Hibernate

您好,我是 Spring Boot 的新手,我開發了通過 ID 獲取、創建和刪除單個記錄的 API,現在我想發出刪除選定的多個記錄的請求。 示例:我喜歡在單個請求中刪除 10 條記錄中的 4 條記錄,而不是發出 4 條刪除請求。

項目控制器.java

@Qualifier("projectServiceImpl")
@Autowired
private ProjectService projectService;

@Autowired
private MapValidationErrorService mapValidationErrorService;

@PostMapping("")
public ResponseEntity<?> createNewProject(@Valid @RequestBody Project project, BindingResult result){

    ResponseEntity<?> errorMap = mapValidationErrorService.MapValidationService(result);
    if(errorMap!=null) return errorMap;

    Project project1 = projectService.saveOrUpdateProject(project);
    return new ResponseEntity<Project>(project1, HttpStatus.CREATED);
}

@GetMapping("/{id}")
public ResponseEntity<?> findProjectById(@PathVariable Long id){
    Project project = projectService.findProjectById(id);
    return new ResponseEntity<Project>(project, HttpStatus.OK);
}

@GetMapping("")
public List<Project> getAllProjects(){return projectService.findAllProjects();}

@DeleteMapping("/{id}")
public ResponseEntity<?> deleteProject(@PathVariable Long id){
    projectService.deleteProjectById(id);

    return new ResponseEntity<String>("Project with id: '"+id+ "' was deleted", HttpStatus.OK);
}

ProjectServiceImpl.java

@Autowired
private ProjectRepository projectRepository;

@Override
public long count() {
    return projectRepository.count();
}

public Project saveOrUpdateProject(Project project){
    try{
        project.setProjectNumber(project.getProjectNumber());
        return projectRepository.save(project);
    }catch (Exception e){
        throw new ProjectNumberException("The project number "+project.getProjectNumber()+" is already existed. Please select a different project number.");
    }
}

public Project findProjectById(Long id) {
    return projectRepository.findById(id).orElse(null);
}

public List<Project> findAllProjects() {
    return projectRepository.findAll();
}

public void deleteProjectById(Long id) {
    Project project = projectRepository.findById(id).orElse(null);;
    projectRepository.delete(project);
}

項目庫.java

@Repository
public interface ProjectRepository extends JpaRepository<Project, Long>, QuerydslPredicateExecutor<Project> {}

您可以在ProjectRepository添加這樣的方法

@Modifying
@Query("delete from Project where id in (:ids)")
int deleteByIds(@Param("ids") List<Long> ids);

您需要一個端點來處理此類 JSON 請求

{
  "ids" : [1, 2, 3]
}

我有類似的問題。 以下解決方案解決了我的問題:

項目控制器.java:

@DeleteMapping("/")
public ResponseEntity<?> deleteProject(@RequestBody Long[] ids){
projectService.deleteProjectById(ids);

return new ResponseEntity<String>("Project with ids: '"+ids+ "' was deleted", 
HttpStatus.OK);
} 

ProjectServiceImpl.java

public void deleteProjectById(Long[] ids) {
  for (Long id : ids) {
  Project project = projectRepository.findById(id).orElse(null);
  projectRepository.delete(project);
  }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM