Как структурировать бэкэнд Java Spring / Hibernate для двунаправленных отношений - PullRequest
0 голосов
/ 02 июля 2019

Я создаю клон Twitter, который имеет отношения OneToMany / ManyToOne с пользователями и твитами (один пользователь, много твитов и т. Д.).

Я использую двунаправленные отношения и использую @JsonManagedReference и @JsonBackReference для обработки бесконечной рекурсии, однако, поскольку бесконечная рекурсия была решена, теперь я не могу получить информацию о пользователях из каждого твита.

Доменные объекты:

Пользовательский объект

@OneToMany(mappedBy = "user", fetch = FetchType.LAZY)
@JsonBackReference
private Set<Tweet> tweets = new HashSet<>();

Tweet Object

@ManyToOne
@JoinColumn(name = "user_id")
@JsonManagedReference
private User user;

Ответы API

ПОЛУЧИТЕ пользователей (это выглядит хорошо)

[
    {
        "id": 1,
        "name": "Alex",
        "tweets": [
            {
                "id": 6,
                "tweet": "cook one meal, doesn't make u a chef"
            },
            {
                "id": 8,
                "tweet": "Red fox jumped over the barn"
            }
        ]
    }
]

ПОЛУЧИТЬ твиты (этот не очень хороший, у меня нет информации о пользователях в каждом твите, но если я добавлю ее, то снова будет бесконечная рекурсия)

[
    {
        "id": 6,
        "tweet": "cook one meal, doesn't make u a chef"
    },
    {
        "id": 8,
        "tweet": "Red fox jumped over the barn"
    }
]

1 Ответ

0 голосов
/ 12 июля 2019

Вы можете использовать JsonIgnoreProperties, чтобы указать Hibernate игнорировать свойство при сериализации.

Tweet Object

@ManyToOne
@JoinColumn(name = "user_id")
@JsonIgnoreProperties("tweets")
private User user;

Так что теперь, когда вы сериализуете свой объект Tweet, он будет содержать всю User информацию , за исключением твитов.

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