gpt4 book ai didi

java - 如何使用 JsonManagedReference 从相关对象读取属性

转载 作者:太空宇宙 更新时间:2023-11-04 14:16:26 25 4
gpt4 key购买 nike

我有两个对象:UserEntity 和 ApartmentEntity,它们以 OneToMany 方式关联(一个用户可以拥有多个公寓)。我在使用无限递归将其序列化为 JSON 时遇到问题(我使用 @JsonManagedReference 和 @JsonBackReference: Infinite Recursion with Jackson JSON and Hibernate JPA issue 解决了它),但现在我无法从 Apartments 表中读取 user_id (我需要知道哪个用户拥有当前公寓)。

公寓实体:

@Entity
@Table(name = "users")
@Scope("session")
public class UserEntity {

@Id
@Column(name = "user_id")
@GeneratedValue
public int user_id;

//other fields ...

@JsonManagedReference
@OneToMany(mappedBy="user", cascade = { CascadeType.MERGE }, fetch=FetchType.EAGER)
private List<ApartmentEntity> apartments;

//getters setters ...
}

公寓实体

@Entity
@Table(name = "apartments")
public class ApartmentEntity {

@Id
@Column(name = "id")
@GeneratedValue
private int id;

// ...

@JsonBackReference
@ManyToOne
@JoinColumn(name="user_id")
private UserEntity user;

//getters, setters ...
}

现在返回的 JSON 在 Apartment 属性中没有 user_id。

如何解决这个问题?如何使用 @Json 注释读取某些属性。我被困在这里了。

最佳答案

JsonManagedReference、JsonBackReference 以一种方式工作。因此 UserEntity JSON 包含 ApartmentEntities,但 ApartmentEntity 不会包含 UserEntity。

Jackson 提供了更好的机制来避免循环引用:

http://wiki.fasterxml.com/JacksonFeatureObjectIdentity

由于您已经有一个使用 JPA 的 id 字段,我建议在实体类上使用 PropertyGenerator:

@JsonIdentityInfo(generator = ObjectIdGenerators.PropertyGenerator.class,property = "user_id",scope = UserEntity.class)

@JsonIdentityInfo(generator = ObjectIdGenerators.PropertyGenerator.class,property = "id",scope = ApartmentEntity.class)

关于java - 如何使用 JsonManagedReference 从相关对象读取属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27668427/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com