JPA OneToOne найти все застрял в петле - PullRequest
1 голос
/ 13 июня 2019

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

findAll()

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

Company.class

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;


}

File.class

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;
    }

}

1 Ответ

1 голос
/ 14 июня 2019

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

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

@JsonIgnore
@OneToOne(fetch = FetchType.EAGER)
@MapsId
private Company company;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...