Я получаю эту ошибку при интеграции весенней загрузки с репозиторием JPA вот код
@CrossOrigin(origins = "http://localhost:4200")
@RestController
@RequestMapping("/api")
public class EmpController {
@Autowired
private CrudRepo crud;
@Autowired
private AddrCrudRepo addr;
@Autowired
private EntityManager entity;
//@Autowired
//private ModelMapper mapper;
private static int count = 0;
@Bean
public ModelMapper model() {
return new ModelMapper();
}
//@Autowired
// public EmpController(ModelMapper mapper) {
// this.mapper = mapper;
// }
@RequestMapping(path = "/post-addr", method = RequestMethod.POST)
public List<AddressModel> postAddr(@Valid @RequestBody List<AddressRequest> addr1){
// crud.findById(id)
//AddressModel list = new AddressModel();
EmployeeModel emp = new EmployeeModel();
System.out.println("CALLING THE MAPPER "+addr1);
List<AddressModel> addr_list = ObjectMapperUtils.mapAll(addr1, AddressModel.class);
System.out.println("CALLED THE MAPPER "+addr_list);
addr_list.forEach((a) -> {
crud.findById(a.getEmpId()).ifPresent((b) -> {
System.out.println(this.count++);
a.setEmp_id(b);
b.getAddress().add(a);
});
});
// AddressModel addr_list = model().map(addr1, AddressModel.class);
//
// crud.findById(addr1.getEmp_id()).ifPresent((b) -> {
// addr_list.setEmp_id(b);
//
// });`enter code here`
System.out.println(addr_list.size());
List<AddressModel> addr3 = addr.saveAll(addr_list);
System.out.println(addr3);
return addr_list;
}
получение ошибки в методе postAddr, когда он возвращает List<AddressModel>, а вот AddressModel
@Entity
@Table(name = "Emp_Address")
public class AddressModel implements Serializable{
@Column(name = "address_id")
@Id
private Integer address_id;
@Column(name = "city")
private String city;
@Column(name = "states")
private String states;
@Transient
private Integer empId;
@ManyToOne
@JoinColumn(name = "emp_id")
private EmployeeModel emp_id;
public AddressModel() {
}
//getter and setter
и EmployeeModel
@Entity
@Table(name = "Employee")
public class EmployeeModel implements Serializable{
@Column(name = "Emp_id")
@Id
private Integer emp_id;
@Column(name = "Emp_Name")
private String emp_name;
@OneToMany(mappedBy = "emp_id")
private Collection<AddressModel> address = new ArrayList<>();
public EmployeeModel() {
}
//getter and setters
поэтому, хотя saveAll выполняется правильно, но когда метод postAddr возвращает список, он выдает StackOverflow




Эта StackOverflow ошибка возникает из-за того, что сгенерированные toString методы обоих классов циклически зависят друг от друга.
EmployeeModel пытается напечатать AddressModel, но снова AddressModel пытается напечатать EmployeeModel и, следовательно, ошибка.
Попробуйте удалить AddressModel из toString метода класса EmployeeModel или наоборот, удалите EmployeeModel из toString метода класса AddressModel.
Вы печатаете объекты на консоли?