You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JPA OneToMany关系配置:如何获取Fridge实体关联的用户与商品ID

问题根因

你无法在返回结果中获取关联的用户ID、商品ID,是因为Fridge实体类里的user和product字段都加了@JsonBackReference注解:该注解的作用是JSON序列化时直接忽略标注字段,避免双向关联引发的无限递归报错,因此两个关联对象的所有信息默认都不会输出。

推荐修改方案(无侵入,无需调整原有数据库映射逻辑)

直接在Fridge实体类中新增两个专供序列化使用的getter方法,仅返回关联对象的ID即可,不会触发循环引用问题,修改后的Fridge类新增代码如下:

@Entity(name = "Fridge")
@Table(name = "fridge")
public class Fridge{

    // 原有代码保持不变

    // 新增以下两个方法即可
    @JsonProperty("user_id")
    public UUID getUserId() {
        return user != null ? user.getId() : null;
    }

    @JsonProperty("product_id")
    public UUID getProductId() {
        return product != null ? product.getId() : null;
    }
}

可选方案(需要调整关联注解,适合需要同时返回关联对象其他字段的场景)

如果你后续还需要返回用户名、商品名等关联对象的其他字段,可以将@JsonBackReference替换为@JsonIgnoreProperties,手动指定要忽略的、会触发循环引用的字段即可:

@ManyToOne
@JoinColumn(name="user_id")
// 忽略User类中会引发循环的fridge字段,以及敏感的密码字段
@JsonIgnoreProperties({"fridge", "password"})
private User user;

@ManyToOne
@JoinColumn(name="product_id")
// 忽略Product类中会引发循环的fridge、ingredients字段
@JsonIgnoreProperties({"fridge", "ingredients"})
private Product product;

修改完成后返回结果就会自动携带user_id和product_id字段,效果如下:

"fridge": [
        {
            "id": "79baae3e-8189-4ebb-8a40-2116a77693b8",
            "quantity": 25,
            "added_at": "25/08/21",
            "user_id": "你的用户ID值",
            "product_id": "你的商品ID值"
        }
]

内容的提问来源于stack exchange,提问作者Denis Popa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 07:36:04