gpt4 book ai didi

java - spring boot删除 Controller 中的员工代码困惑

转载 作者:行者123 更新时间:2023-11-30 02:53:44 25 4
gpt4 key购买 nike

这是我的 Controller :

EmployeeController.java:

@RequestMapping(value="/employees/delete/{empNo}")
public String removeEmployee(@PathVariable("empNo") long empNo) {
this.employeeService.deleteEmployee(empNo);
return "redirect:/welcome/employees";
}

EmployeeRepository.java:

import com.hr.enity.Employee;
//import org.springframework.data.repository.CrudRepository;
import org.springframework.stereotype.Repository;
import java.util.List;
import org.springframework.dao.DataAccessException;

@Repository
public interface EmployeeRepository {
List<Employee> findAll() throws DataAccessException;

Employee findById(long empNo) throws DataAccessException;

void save(Employee employee) throws DataAccessException;

void delete(long empNo) throws DataAccessException;
}

EmployeeService.java:

import org.springframework.dao.DataAccessException;
import java.util.List;
import com.hr.enity.Employee;

public interface EmployeeService {
Employee findEmployeeById(long empNo) throws DataAccessException;

void saveEmployee(Employee employee) throws DataAccessException;

List<Employee> findEmployees() throws DataAccessException;

void deleteEmployee(long empNo) throws DataAccessException;
}

EmployeeServiceImpl.java:

@Service
public class EmployeeServiceImpl implements EmployeeService {
private EmployeeRepository employeeRepository;

@Autowired
public EmployeeServiceImpl(EmployeeRepository employeeRepository) {
this.employeeRepository = employeeRepository;
}

@Override
public Employee findEmployeeById(long empNo) throws DataAccessException {
return employeeRepository.findById(empNo);
}

@Override
public List<Employee> findEmployees() throws DataAccessException {
List<Employee> results = this.employeeRepository.findAll();
return results;
}

@Override
public void saveEmployee(Employee employee) throws DataAccessException {
employeeRepository.save(employee);
}

@Override
public void deleteEmployee(long empNo) throws DataAccessException {
employeeRepository.delete(empNo);
}
}

EmployeeJpaRepository.java:

@Repository
public interface EmployeeJpaRepository extends EmployeeRepository, CrudRepository<Employee, Long> {
@Query("SELECT e from Employee e WHERE e.lastName='Demian' and e.gender='F'")
List<Employee> findAll() throws DataAccessException;

@Query("SELECT e FROM Employee e WHERE e.empNo =:empNo")
Employee findById(@Param("empNo") long empNo);
}

当我点击删除按钮时,它会定向到 http://localhost:8080/welcome/employees/delete/1234但出现错误消息:

Caused by: org.springframework.data.mapping.PropertyReferenceException: No property delete found for type Employee!

rg.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'employeeServiceImpl' defined in file [/home/manasa/Desktop/projects/employee-manager/target/classes/com/hr/service/EmployeeServiceImpl.class]: Unsatisfied dependency expressed through constructor argument with index 0 of type [com.hr.repository.EmployeeRepository]: Error creating bean with name 'employeeJpaRepository': Invocation of init method failed; nested exception is org.springframework.data.mapping.PropertyReferenceException: No property delete found for type Employee!; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'employeeJpaRepository': Invocation of init method failed; nested exception is org.springframework.data.mapping.PropertyReferenceException: No property delete found for type Employee!
at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:749) ~[spring-beans-4.2.6.RELEASE.jar:4.2.6.RELEASE]
at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:185) ~[spring-beans-4.2.6.RELEASE.jar:4.2.6.RELEASE]

有时这是白标签错误或编译器错误

最佳答案

首先删除您的 EmployeeRepository,您不需要它。并像下面这样更改 ServiceImpl。另外我猜测 empNo 是主键,那么您不需要在 EmployeeJpaRepository 中编写 findById,可以直接从 CrudRepository 中使用 findOne(id) 来使用。

在您的情况下,由于它很长,您可以将其称为 findOne(Long.toString(empNo))

@Service
public class EmployeeServiceImpl implements EmployeeService {

@Autowired
private EmployeeJpaRepository employeeJpaRepository ;

@Override
public Employee findEmployeeById(long empNo) throws DataAccessException {
return employeeJpaRepository.findById(empNo);
}

@Override
public List<Employee> findEmployees() throws DataAccessException {
return employeeJpaRepository.findAll();
}

@Override
public void saveEmployee(Employee employee) throws DataAccessException {
employeeRepository.save(employee);
}

@Override
public void deleteEmployee(long empNo) throws DataAccessException {
employeeRepository.delete(Long.toString(empNo));
}
}

关于java - spring boot删除 Controller 中的员工代码困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37864512/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com