Работа с двунаправленными отношениями
Имеются сущности с отношением @OneToMany и @ManyToOne.
User
@OneToMany(mappedBy = "user", cascade = { CascadeType.REFRESH }, fetch = FetchType.LAZY)
private List<Post> posts = new ArrayList<>();
Post
@ManyToOne(cascade = { CascadeType.REFRESH, CascadeType.DETACH }, fetch = FetchType.EAGER)
@JoinTable(name = "user_post", joinColumns = @JoinColumn(name = "post_id"), inverseJoinColumns = @JoinColumn(name = "user_id"))
private User user;
При попытке сохранить / получить посты падает stack error.
Решил с помощью аннотирования @JsonManagedReference & @JsonBackReference.
User
@JsonManagedReference
@OneToMany(mappedBy = "user", cascade = { CascadeType.REFRESH }, fetch = FetchType.LAZY)
private List<Post> posts = new ArrayList<>();
Post
@JsonBackReference
@ManyToOne(cascade = { CascadeType.REFRESH, CascadeType.DETACH }, fetch = FetchType.EAGER)
@JoinTable(name = "user_post", joinColumns = @JoinColumn(name = "post_id"), inverseJoinColumns = @JoinColumn(name = "user_id"))
private User user;
Однако в данном случае я не могу получить юзера при запросе поста. Видимо из-за того что он не сериализуется как надо?
Прошу ваших советов по решению данного вопроса, что можно сделать и как будет правильней поступить?
Ответы (1 шт):
Мне удалось решить эту проблему убрав @JsonBackReference & @JsonManagedReference и добавив @JsonIdentityInfo для всех моих сущностей.
Исчерпывающий ответ я нашел здесь https://stackoverflow.com/questions/41778386/jackson-bidirectional-relationship-one-to-many-not-working