如何修复‘Cannot resolve method 'getById' in 'EmployeeRepository’错误?
Spring Boot错误:
Cannot resolve method 'getById' in 'EmployeeRepository' 解决方法 问题描述
开发Spring Boot项目时遇到编译错误:Cannot resolve method 'getById' in 'EmployeeRepository',已查阅相关问题但未解决。
项目相关代码
服务实现类(EmployeeServiceImpl.java)
@Service public class EmployeeServiceImpl implements EmployeeService { @Autowired EmployeeRepository employeeRepository; @Override public MessageResponse createEmployee(EmployeeRequest employeeRequest) { Employee newEmployee = new Employee(); newEmployee.setFirstName(employeeRequest.getFirstName()); newEmployee.setLastname(employeeRequest.getLastname()); newEmployee.setPhoneNumber(employeeRequest.getPhoneNumber()); newEmployee.setEmail(employeeRequest.getEmail()); newEmployee.setSalary(employeeRequest.getSalary()); newEmployee.setDepartment(employeeRequest.getDepartment()); employeeRepository.save(newEmployee); return new MessageResponse("New Employee created successfully"); } @Override public Optional<Employee> updateEmployee(Integer employeeId, EmployeeRequest employeeRequest) throws ResourceNotFoundException { Optional<Employee> employee = employeeRepository.findById(employeeId); if (employee.isEmpty()) { throw new ResourceNotFoundException("Employee", "id", employeeId); } else { employee.get().setFirstName(employeeRequest.getFirstName()); employee.get().setLastname(employeeRequest.getLastname()); employee.get().setPhoneNumber(employeeRequest.getPhoneNumber()); employee.get().setEmail(employeeRequest.getEmail()); employee.get().setSalary(employeeRequest.getSalary()); employee.get().setDepartment(employeeRequest.getDepartment()); employeeRepository.save(employee.get()); return employee; } } @Override public Employee getASingleEmployee(Integer employeeId) throws ResourceNotFoundException { return employeeRepository.findById(employeeId) .orElseThrow(() -> new ResourceNotFoundException("Employee", "id", employeeId)); } @Override public List<Employee> getAllEmployee() { return employeeRepository.findAll(); } @Override public void deleteEmployee(Integer employeeId) throws ResourceNotFoundException { if (employeeRepository.getById(employeeId).getId().equals(employeeId)) { employeeRepository.deleteById(employeeId); } else throw new ResourceNotFoundException("Employee", "id", employeeId); } }
API控制器类(EmployeeController.java)
public class EmployeeController { @Autowired private EmployeeService employeeService; @GetMapping("/all") public ResponseEntity<List<Employee>> getAllEmployees() { List<Employee> employees = employeeService.getAllEmployee(); return new ResponseEntity<>(employees, HttpStatus.OK); } @GetMapping("/find/{id}") public ResponseEntity<Employee> getEmployeeById(@PathVariable("id") Integer id) { Employee employee = employeeService.getASingleEmployee(id); return new ResponseEntity<>(employee, HttpStatus.OK); } @PostMapping("/add") public ResponseEntity<MessageResponse> addEmployee(@RequestBody EmployeeRequest employee) { MessageResponse newEmployee = employeeService.createEmployee(employee); return new ResponseEntity<>(newEmployee, HttpStatus.CREATED); } @PutMapping("/update/{id}") public Optional<Employee> updateEmployee(@PathVariable Integer id, @RequestBody EmployeeRequest employee) { return employeeService.updateEmployee(id, employee); } @DeleteMapping("/delete/{id}") public ResponseEntity<?> deleteEmployee(@PathVariable("id") Integer id) { employeeService.deleteEmployee(id); return new ResponseEntity<>(HttpStatus.OK); } }
POM父依赖配置
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.3.1.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent>
问题原因
当前使用的Spring Boot版本为2.3.1.RELEASE,对应的Spring Data JPA版本是2.3.x,该版本中并没有getById()方法。getById()是Spring Data JPA 2.5+(对应Spring Boot 2.5及以上版本)才引入的方法,用于替代旧版本的getOne()方法,因此当前版本下IDE无法解析该方法。
修复方法
方法一:替换为当前版本支持的方法
将deleteEmployee方法中的getById()替换为项目中已在使用的findById()方法,保持代码风格一致且适配当前版本API:
修改后的deleteEmployee方法:
@Override public void deleteEmployee(Integer employeeId) throws ResourceNotFoundException { // 先判断员工是否存在,不存在则抛出自定义异常 Employee employee = employeeRepository.findById(employeeId) .orElseThrow(() -> new ResourceNotFoundException("Employee", "id", employeeId)); // 存在则执行删除 employeeRepository.delete(employee); }
方法二:升级Spring Boot版本
将POM中的Spring Boot父依赖版本升级到2.5及以上(例如2.5.0.RELEASE),即可直接使用getById()方法。注意升级版本可能带来依赖兼容性问题,需对项目进行全面测试。
修改后的POM父依赖:
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.5.0.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent>
内容的提问来源于stack exchange,提问作者invzbl3
相关产品推荐
相关产品推荐

