You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修复‘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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 08:45:32