JPA OneToOne находит все застрявшие в цикле

У меня есть Java REST API с JPA. Всякий раз, когда я создаю объект, я также хочу создать другой объект с ключом forgein. Или, может быть, кто-то может посоветовать мне другое, я был бы очень признателен и учился бы у него =) Когда я успешно создам компанию, она также создаст файловую сущность в базе данных, так что все работает нормально. но, Всякий раз, когда я выполняю метод findAll в репозитории JPA, он дает мне цикл одной компании, которую я создал. так:

JPA OneToOne находит все застрявшие в цикле

Если вам нужна дополнительная информация, пожалуйста, дайте мне знать!

Компания.класс

package nl.hulpvriend.dehulpvriend.company;
import javax.validation.constraints.NotNull;
import lombok.*;
import nl.hulpvriend.dehulpvriend.file.File;

import javax.persistence.*;
import javax.validation.constraints.Size;

@Entity
@Data
@NoArgsConstructor
@AllArgsConstructor
@Setter
@Getter
public class Company {


    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer id;

    @NotNull
    private String email;

    @Column(unique = true)
    @NotNull(message = "The company name cannot be empty")
    @Size(max = 30, message = "Company name cannot be longer than 30 characters")
    private String name;

    @NotNull(message = "Company must contain a service type")
    @Enumerated(EnumType.STRING)
    private ServiceType serviceType;

    private double stars;

    private Integer pricePerHour;

    private String description;

    private String kvk;

    @OneToOne(mappedBy = "company", cascade = CascadeType.ALL)
    private File file;


}

Файл.класс

package nl.hulpvriend.dehulpvriend.file;

import lombok.*;
import nl.hulpvriend.dehulpvriend.company.Company;
import org.hibernate.annotations.GenericGenerator;

import javax.persistence.*;
import javax.validation.constraints.NotNull;

@AllArgsConstructor
@Getter
@Setter
@NoArgsConstructor
@Entity
@Data
public class File {

    @Id
    private Integer id;

    private String fileId;

    @OneToOne(fetch = FetchType.EAGER)
    @MapsId
    private Company company;

    @NotNull(message = "Must contain a data")
    @Lob
    private byte[] data;

    private String downloadUrl;

    private String fileName;

    private String fileType;

    public File(String fileName, String fileType, byte[] data) {
        this.fileName = fileName;
        this.fileType = fileType;
        this.data = data;
    }

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

Ответы 1

Ответ принят как подходящий

Добавьте JsonIgnore к одной из ссылок, чтобы разорвать цикл:

Например, в классе File:

@JsonIgnore
@OneToOne(fetch = FetchType.EAGER)
@MapsId
private Company company;

Вау, это действительно сработало... Не могу поверить, почему Java настолько сложнее, чем .NET :/ Большое вам спасибо, вы действительно сделали мой день :))

BartK_97 14.06.2019 21:34

Мне любопытно, как вы справляетесь с циклическими ссылками и сериализацией в .NET?

Simon Martinelli 15.06.2019 10:31

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