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
相关产品推荐
相关产品推荐

