У меня есть Java REST API с JPA. Всякий раз, когда я создаю объект, я также хочу создать другой объект с ключом forgein. Или, может быть, кто-то может посоветовать мне другое, я был бы очень признателен и учился бы у него =) Когда я успешно создам компанию, она также создаст файловую сущность в базе данных, так что все работает нормально. но, Всякий раз, когда я выполняю метод findAll в репозитории JPA, он дает мне цикл одной компании, которую я создал. так:
Если вам нужна дополнительная информация, пожалуйста, дайте мне знать!
Компания.класс
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;
}
}
Добавьте JsonIgnore к одной из ссылок, чтобы разорвать цикл:
Например, в классе File:
@JsonIgnore
@OneToOne(fetch = FetchType.EAGER)
@MapsId
private Company company;
Вау, это действительно сработало... Не могу поверить, почему Java настолько сложнее, чем .NET :/ Большое вам спасибо, вы действительно сделали мой день :))
Мне любопытно, как вы справляетесь с циклическими ссылками и сериализацией в .NET?
Возможный дубликат как исправить весеннюю загрузку от одного ко многим двунаправленным циклам бесконечности?