【问题标题】:ManyToOne Lazy loading not working Spring bootManyToOne延迟加载不起作用Spring启动
【发布时间】:2022-02-06 08:46:32
【问题描述】:

我已经使用 Spring boot 制作了其余的 api。它有两个实体员工和部门。员工有部门对象,所以关系是多对一。它是单向的。部门没有员工名单。当我点击员工 GET 方法端点时,我得到了 com.fasterxml.jackson.databind.exc.InvalidDefinitionException 异常。请告诉我如何解决它。

员工类:

@Entity
@Table(name = "employees")
public class Employee {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Integer id;
private String firstName;
private String lastName;
private Integer salary;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name="department_id",referencedColumnName = "id",nullable = false)
private Department department;

部门类:

@Entity
@Table(name = "departments")
public class Department {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Integer id;
private String name;

员工服务:

@Service
public class EmployeeService {

private final EmployeeRepository employeeRepository;

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

public List<Employee> getAllEmployees(){
    return employeeRepository.findAll();
}

public Employee getEmployeeById(Integer id){
    Optional<Employee> optionalEmployee = employeeRepository.findById(id);
    if(optionalEmployee.isEmpty()){
        throw new IllegalStateException("Department does not exists");
    }
    return optionalEmployee.get();
}

public Employee createEmployee(Employee employee){
    return employeeRepository.save(employee);
}

员工控制器:

@RestController
@RequestMapping(path = "/employees")
public class EmployeeController {

private final EmployeeService employeeService;

@Autowired
public EmployeeController(EmployeeService employeeService) {
    this.employeeService = employeeService;
}

@GetMapping
public List<Employee> getAllDepartments(){
    return employeeService.getAllEmployees();
}
   @PostMapping
public Employee createEmployee(@RequestBody Employee employee){
    return employeeService.createEmployee(employee);
}}

【问题讨论】:

  • 你必须把@JsonProperty(access = JsonProperty.Access.WRITE_ONLY)注解在ManyToOne
  • 谢谢它正在工作。但是我可以将它访问到单独的端点,例如员工/ID/部门

标签: java spring spring-boot hibernate spring-data-jpa


【解决方案1】:

你必须把@JsonProperty(access = JsonProperty.Access.WRITE_ONLY)注解放在ManyToOne关系映射中

【讨论】:

  • 我能否在单独的端点中读取它。还有你能告诉我如何实现延迟加载
  • 如果你是初学者,那么双向映射比单向映射好
  • 好的,谢谢。您能否与资源共享以了解延迟加载。
  • @Professor 看这里netsurfingzone.com/hibernate/…
猜你喜欢
  • 1970-01-01
  • 2015-08-08
  • 1970-01-01
  • 2018-07-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-18
  • 1970-01-01
相关资源
最近更新 更多