Зацикливание объектов в спящем режиме

У меня две сущности и когда я хочу получить grade.getSubcompetence(). Ошибка возникает, когда я сохраняю объект, потому что данные субкомпетенции равны нулю. Когда я отлаживаю, я вижу ошибку:

'java.lang.StackOverflowError' exception. Cannot evaluate _$$_jvstea5_f.toString()

объект оценки:

@Entity
@Data
@NoArgsConstructor
@ToString(exclude = {"subcompetence"})
@Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
@Table(name = "GRADE")
public class Grade {
    @JsonBackReference
    @ManyToOne(
            fetch = FetchType.LAZY,
            optional = false)
    @JoinColumn(name = "SUBCOMPETENCE_ID", nullable = false)
    private Subcompetence subcompetence;

    @JsonBackReference
    @ManyToOne(
            fetch = FetchType.LAZY,
            optional = false)
    @JoinColumn(name = "LEVEL_ID", nullable = false)
    private Level level;
}

субъект субкомпетенции:

@Entity
@Data
@NoArgsConstructor
@Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
@Table(name = "SUBCOMPETENCE")
public class Subcompetence {

    @JsonManagedReference
    @OneToMany(
            mappedBy = "subcompetence",
            fetch = FetchType.LAZY,
            cascade = CascadeType.ALL)
    private List<Grade> grades;
}

Привет, можете ли вы также опубликовать фрагмент кода, который вызывает эту ошибку?

robot_alien 11.12.2018 11:54

@robot_alien обновлен

Bogdan 11.12.2018 12:02

Трудно связать с изображением, опубликуйте фрагмент цикла здесь, кажется, проблема там сама

robot_alien 11.12.2018 12:12

Кроме того, я думаю, что код превращается в циклическую структуру ...

robot_alien 11.12.2018 12:33

Во все столбцы соединения добавьте аннотацию @JsonIgnore.

soorapadman 11.12.2018 13:40
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
5
110
2

Ответы 2

попробуйте добавить @EqualsAndHashCode(exclude = "grades") в свой класс Subcompetence

это тоже не помогает (

Bogdan 11.12.2018 13:00

Добавьте @EqualsAndHashCode(callSuper=false) и JsonIgnore, как показано ниже.

  @OneToMany(
            mappedBy = "subcompetence",
            fetch = FetchType.LAZY,
            cascade = CascadeType.ALL)
@JsonIgnore
private List<Grade> grades;

Удалите @ToString(exclude = {"subcompetence"}) и убедитесь, что я столкнулся с этой проблемой.

soorapadman 11.12.2018 14:04

вы удалили @JsonManagedReference и `@ JsonBackReference` из других классов?

soorapadman 11.12.2018 14:13

да, я удаляю эти аннотации над полями оценок и подкомпетентностей

Bogdan 11.12.2018 14:21

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