java.lang.StackOverflowError: null для jpa saveAll - PullRequest
0 голосов
/ 09 марта 2019

Я получаю эти ошибки при интеграции Spring-Boot с репозиторием 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 возвращает List, он выбрасывает StackOverflow

1 Ответ

2 голосов
/ 09 марта 2019

Эта ошибка StackOverflow наступает, потому что сгенерированные toString методы обоих классов циклически зависят друг от друга.

EmployeeModel пытается печатать AddressModel, но снова AddressModel пытается печатать EmployeeModel и, следовательно, ошибка.

Попробуйте удалить AddressModel из toString метода EmployeeModel класса или наоборот, удалите EmployeeModel из toString метода AddressModel класса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...