Java.lang.StackOverflowError: ноль для JPA saveAll

Я получаю эту ошибку при интеграции весенней загрузки с репозиторием 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

Вы печатаете объекты на консоли?

Atul Dwivedi 09.03.2019 06:10
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
1
1 522
1

Ответы 1

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

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

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

Другие вопросы по теме