Java Вложенное исключение Srping: java .lang.StackOverflowError - PullRequest
1 голос
/ 08 марта 2020

У меня есть несколько классов сущностей, и я пытаюсь получить все данные из базы данных, но у меня проблема с вложенными исключениями. Пожалуйста, см. Подробности ниже: объект Worker:

   Worker{
        @Id
        private Long id;

        @Transient
        private List<WorkerDepartment> workerDepartments;

        @Transient
        private List<WorkerDepartmentPosition> workerDepartmentPositions;

        @Transient
        private List<WorkerAdjustmentBonus> workerAdjustmentBonus;
    }

объект WorkerDepartment

    WorkerDepartment{
        @Id
        private Long id;

        @ManyToOne
        @JsonBackReference(value = "worker")
        @JoinColumn(name = "worker_id")
        private worker worker;

    }

объект WorkerDepartmentPosition

    WorkerDepartmentPosition{
        @Id
        private Long id;

        @Column(name = "worker_id")
        private Long workerId;
    }

WorkerBonus

    WorkerBonus{
        @Id
        private Long id;

        @ManyToOne
        @JsonBackReference(value = "worker")
        @JoinColumn(name = "worker_id")
        private worker worker;

        @ManyToOne
        @JoinColumn(name = "payment_id")
        private WorkerPayment employeePayment;

        @Column(name = "bonus")
        private Double bonus;
    }

Я пытаюсь получить все рабочие, и данные ответа

{"status":"SUCCESS","data":[have full data],"message":"successfully done"}{"status":"ERROR","message":"Handler dispatch failed; nested exception is java.lang.StackOverflowError"}

Пожалуйста, сообщите мне.

1 Ответ

0 голосов
/ 08 марта 2020

Проблема может быть связана с перекрестной ссылкой, например, Worker и WorkerDepartment. Когда Джексон пытается десериализовать ваши объекты, он проходит через граф объектов и, как только он получает доступ к атрибуту WorkerDepartment, он возвращается к Worker и выполняет этот цикл снова и снова.

Поскольку вы уже используете @JsonBackReference(value = "worker"), вы почти уже исправили проблему, но вам нужно @JsonManagedReference с другой стороны:

public class Worker{
    @Id
    private Long id;

    @JsonManagedReference
    private List<WorkerDepartment> workerDepartments;

    @JsonManagedReference
    private List<WorkerDepartmentPosition> workerDepartmentPositions;

    @JsonManagedReference
    private List<WorkerAdjustmentBonus> workerAdjustmentBonus;
}

Baeldung также предоставляет хороший учебник об этом для дальнейшего чтения.

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