我正在构建一个 Twitter 克隆,它与用户和推文(一个用户、多条推文等)具有一对多/多对一关系。
我使用的是双向关系,并使用@JsonManagedReference和@JsonBackReference来处理无限递归,但是,由于无限递归已经解决,现在我无法从每条推文中获取用户信息。
域对象:
用户对象
@OneToMany(mappedBy = "user", fetch = FetchType.LAZY)
@JsonBackReference
private Set<Tweet> tweets = new HashSet<>();
推文对象
@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"
}
]
最佳答案
您可以使用 JsonIgnoreProperties
告诉 Hibernate 在序列化时忽略该属性。
推文对象
@ManyToOne
@JoinColumn(name = "user_id")
@JsonIgnoreProperties("tweets")
private User user;
现在,当您序列化 Tweet 对象时,它将包含除推文之外的所有用户
信息。
关于java - 如何构建 Java Spring/Hibernate 后端以实现双向关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56854221/