【问题标题】:Stuck with error: java.util.Set<> cannot be converted to java.lang.Integer遇到错误:java.util.Set<> 无法转换为 java.lang.Integer
【发布时间】:2021-11-02 00:32:30
【问题描述】:

我是 Spring Boot 的初学者,尝试用 Department & Employee 类制作一个应用程序。我在这两个类之间建立了关系,Department 可以有多个 Employee,而 Employee 只能有一个 Department。每次我以错误结束时:

com.learning.model.Employee 无法转换为 java.lang.Integer

另外,我发现了两种通过 API 将数据插入数据库的方法。首先通过服务层,第二直接通过控制器。如果您能告知以上两种方法中最真实的方法,将不胜感激。

部门.java

@Entity
@Table(name = "Department")
@Getter
@Setter
@ToString
@AllArgsConstructor
@NoArgsConstructor
@EqualsAndHashCode
public class Department {

  @Id
  @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "dept_seq")
  @SequenceGenerator(initialValue = 1, name = "dept_seq", sequenceName = "dept_sequence")
  @Column(name = "id")
  private Integer id;
  
  @Column(name = "deptName")
  private String deptName;
  
  @OneToMany(mappedBy = "department", cascade = CascadeType.ALL, orphanRemoval = true)
  @JsonIgnore
  private List<Employee> employees;
}

Employee.java

@Entity
@Table(name = "Employee_Dtls")
@ToString
@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
@EqualsAndHashCode
public class Employee {

  @Id
  @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "emp_seq")
  @SequenceGenerator(initialValue = 1, name = "emp_seq", sequenceName = "employee_sequence")
  @Column(name = "id")
  private Integer id;
  
  @Column(name = "name")
  private String name;
  
  @ManyToOne(cascade=CascadeType.ALL)
  @JoinColumn(name = "dept_id")
  private Department department;
}

DepartmentService.java

@Service
public class DepartmentService {

    @Autowired
    private EmployeeRepository employeeRepository;

    @Autowired
    private DepartmentRepository departmentRepository;

    //Get Department
    public List<Department> getAllDepartments() {
        return departmentRepository.findAll();
    }

    //Add Department
    public Department addDepartment(Department department) {
        Employee emp = employeeRepository.findById(department.getEmployees().get(department.getId())).orElse(null);
        if (null == emp) {
           emp = new Employee();
        }
        emp.setName(department.getEmployees().get(emp.getId()));
        department.setEmployees(emp);
        return departmentRepository.save(department);
    }
}

DepartmentController.java

public class DepartmentController {

  @Autowired
  private DepartmentService departmentService;

  @GetMapping("/get-departments")
  public ResponseEntity<List<Department>> getAllDepartments() {
    List<Department> departments = departmentService.getAllDepartments();
    return new ResponseEntity<>(departments, HttpStatus.OK);
  }
  
  @PostMapping("/department")
  public ResponseEntity<Department> saveDepartment(@RequestBody Department department) {
    Department dept = departmentService.addDepartment(department);
    return new ResponseEntity<>(dept, HttpStatus.OK);
  }
}

【问题讨论】:

  • getAllDepartments 工作正常吗?
  • 请发布您的完整错误消息,包括堆栈跟踪。我想有更多关于可用错误的有价值信息。
  • @ray 我只是检查 getAllDepartment 工作正常,但我必须评论“//”来自 DepartmentController 的所有 PostMapping 和来自 DepartmentService 的 AddDepartment
  • @McPringle 这就是我得到的全部 com.learning.model.Employee 无法转换为 java.lang.Integer,并且此错误会阻止初始化应用程序
  • 所以你在运行时得到错误?您肯定会看到更多发生错误的信息,例如类名或行号。

标签: java spring spring-boot


【解决方案1】:

我认为您必须仔细阅读这些堆栈,这些可能会帮助您了解 @onetomany 注释在 spring 中是如何工作的

One to Many Relationship in spring boot REST Api POSTing oneToMany in a REST call via Spring Boot API

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-01
    • 2015-12-02
    • 1970-01-01
    • 1970-01-01
    • 2014-05-05
    相关资源
    最近更新 更多