Spring JPA двунаправленные рекурсивные отношения - PullRequest
0 голосов
/ 15 января 2020

У меня есть объект с именем Entity, у которого есть переводы в другой объект LocalizedEntity. Моя проблема заключается в получении их из-за рекурсивной загрузки.

@NamedEntityGraph(name = "employeeTranslations", attributeNodes = @NamedAttributeNode("translations"))
@Entity
@Table(name = "employees")
@Getter
@Setter
@NoArgsConstructor
public class Employee {

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

  @Column
  @NotNull
  @NotBlank
  @Email
  private String email;

  @Column
  @NotNull
  @PositiveOrZero
  private int sequence;

  @ManyToOne
  @NotNull
  @JoinColumn(name = "image_id")
  private Image image;

  @OneToMany(mappedBy = "employee")
  @JsonManagedReference
  private List<LocalizedEmployee> translations;
@Entity
@Table(name = "localized_employees")
@NoArgsConstructor
@AllArgsConstructor
@Setter
@Getter
public class LocalizedEmployee {

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

    @ManyToOne
    @JoinColumn(name = "language")
    private Language language;

    @ManyToOne(cascade = CascadeType.PERSIST, fetch = FetchType.EAGER)
    @JsonBackReference
    private Employee employee;

    @Column
    @NotNull
    @NotBlank
    private String name;

    @Column
    @NotNull
    @NotBlank
    private String position;

    @Column
    @NotNull
    @NotBlank
    private String sneak;

Если я хочу получить только Сотрудник с / без LocalizedEmployee, он работает хорошо из-за аннотаций Джексона @JsonBackReference @JsonManagedReference. Но если я хочу получить LocalizedEmployee, мне нужна информация о свойствах сотрудников.

Результаты API LocalizedEmployee

    {
        "id": 22,
        "language": {
            "id": "en"
        },
        "name": "Jakub Kosiński",
        "position": "Specialist",
        "sneak": "asdsaddsa"
    },

Ожидается

    {
        "id": 22,
        "language": {
            "id": "en"
        },
        "employee": {
            ...
        }
        "name": "Jakub Kosiński",
        "position": "Specialist",
        "sneak": "asdsaddsa"
    },
...