JPA: Как создать самостоятельное объединение? - PullRequest
0 голосов
/ 19 сентября 2019

У меня есть пользовательский объект со столбцом помощника.

У каждого пользователя есть помощник, но есть и круги.

Например: помощник пользователя A - это пользователь B, а помощник пользователя B - это пользователь A.

Если я использую аннотации @ManyToOne и @OneToMany, топри преобразовании объектов в JSON существует бесконечная рекурсия, даже @JsonManagedReference и @JsonBackReference не помогли.

BaseEntity:

@MappedSuperclass
@Data
public class BaseEntity {

    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE)
    private long id;

    @Version
    private int version;
}

Пользователь:

@Entity
@AllArgsConstructor
@NoArgsConstructor
@Data
@EqualsAndHashCode(callSuper = true)
@Table(name = "Users")
public class User extends BaseEntity {

    @Column
    private String username;

    @Column
    private String name;

    @JsonManagedReference
    @ManyToOne
    @JoinColumn(name = "assistant_id")
    private User assistant;

    @JsonBackReference
    @OneToMany(mappedBy = "assistant")
    private Set<User> assistants;


}

Есть ли возможность весной решить эту проблему?

Ответы [ 2 ]

0 голосов
/ 20 сентября 2019

Не могли бы вы создать сущность Assistant на основе той же таблицы и присоединиться?

0 голосов
/ 19 сентября 2019

@JsonManagedReference/@JsonBackReference не поможет, потому что «прямые» ссылки все еще могут образовывать цикл, даже если «обратные» ссылки не сериализуются.

Вам нужно , вероятно, для User, назначенного свойству assistant, которое будет сериализовано без его собственного свойства assistant (чтобы любые циклысломать).По сути, у вас та же проблема, что и здесь , за исключением того, что в вашем случае A и B относятся к одному классу.

Помимо решения, описанного в связанном вопросе, вы также захотите указать, какой @JsonView использовать при сериализации объекта.См. Раздел «Использование JSON Views с Spring» здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...