java - 如何构建 Java Spring/Hibernate 后端以实现双向关系

标签 java hibernate spring-boot

我正在构建一个 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/

相关文章:

java - 如何在 Hibernate 中干净地映射 2 个一对一关联

java - 如何验证我没有收到 @JsonProperty 和 @JsonAlias 中定义的两个值?

java - 程序运行无异常但不显示表名

java - Android - 保留方向变化的数据

java - 更新mysql数据库中的数据时需要一些建议

java - 转换一个内部有不同类的对象

java - 如何为下面的类编写junit测试用例

java - Gremlinepipeline 两个顶点之间的边

spring - Thymeleaf 模型属性是否不允许以 'is' 开头?

java - 无法解析配置 ':compileClasspath' 的所有文件