json - 杰克逊在@ManyToMany 关系中的序列化问题
问题描述
我有以下情况:
//--class user --
private ....
@OneToMany(targetEntity = UserRoles.class, mappedBy = "iduser", fetch = FetchType.LAZY)
@JsonManagedReference
private List<UserRoles> userRoleList = new ArrayList<>();
@OneToOne(targetEntity = Login.class, cascade = CascadeType.ALL)
@JoinColumn(name = "iduser", referencedColumnName = "iduser")
@JsonManagedReference
private Login login;
@ManyToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
@JoinTable(name = "n_gruppi_user", joinColumns = { @JoinColumn(name = "iduser") }, inverseJoinColumns = {
@JoinColumn(name = "idgruppo") })
@JsonManagedReference
List<Gruppi> groups = new ArrayList();
下一堂课
@Entity
@Table(name = "gruppi")
@EntityListeners(AuditingEntityListener.class)
@Data
public class Gruppi implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long idgruppo;
private long iduser;
private String tipo;
private String nome_gruppo;
private String pass_gruppo;
private String email_gruppo;
private String descr_gruppo;
private Timestamp data_creazione;
@ManyToMany(mappedBy = "groups")
@JsonBackReference
List<User> users_group = new ArrayList<>();
当我运行应用程序时,一切正常,我得到 当我序列化我的对象用户时,杰克逊序列化除 users_group 之外的所有内容,那是因为我正在使用@JsonBackReference。但是如果不使用@JsonBackReference 循环问题就会出现。我怎样才能得到 users_group 序列化呢?我需要它!
解决方案
对于这两个类,您应该已经定义了一些ID
属性,我们可以使用它来识别数据库中的对象。我们可以使用它来帮助Jackson
识别运行时的实例。您可以删除@JsonBackReference
并@JsonManagedReference
改为使用com.fasterxml.jackson.annotation.JsonIdentityInfo
注释:
@JsonIdentityInfo(generator = ObjectIdGenerators.PropertyGenerator.class,
property = "iduser")
class User {
...
}
和
@JsonIdentityInfo(generator = ObjectIdGenerators.PropertyGenerator.class,
property = "idgruppo")
class Gruppi {
...
}
推荐阅读
- reactjs - 使用反应将项目添加到购物车页面(仅使用 this.state )
- r - 如何在回归分析中使用 clusbootglm 对象(R 中的 ClusterBootstrap 包)
- python - 如何根据开始和结束元素从列表创建子列表?
- dynamics-crm - 是否可以在 Dynamics 365 视图中禁用多行选择?
- php - 需要 Paypal IPN 侦听器帮助
- flutter - 我可以使用 HTML 小部件来解析嵌入的谷歌地图吗?
- r - 根据模糊标准创建组
- c# - 重定向到页面并在 asp.net 中显示弹出窗口
- flutter - zsh:找不到命令:vim
- python - Django - 过滤同一张表上的多个外键