我是Spring靴的新手(但曾在Laravel工作)。我在@ManyToMany关系中面临循环冗余的问题。让我们看一下场景-
我得到的响应(获取与角色具有许多关系的用户列表)-
下面是关联表的ER图,用于管理users
和roles
表之间的多对多关系。
用户实体类具有以下代码-
@Entity
@Where(clause = "deleted_at IS NULL")
@SQLDelete(sql = "UPDATE users SET deleted_at = CURRENT_TIMESTAMP WHERE id = ?", check = ResultCheckStyle.COUNT)
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@Table(name = "users")
@JsonIgnoreProperties(
value = {"createdAt", "updatedAt", "deletedAt"}
)
public class User {
@Id
@Column(name = "id", updatable = false, nullable = false)
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;
@Column(name = "name", nullable = false)
@NotBlank(message = "Name field can not be empty")
private String name;
.....
.....
.....
@ManyToMany(targetEntity = Role.class, fetch = FetchType.EAGER)
@JoinTable(name = "user_roles",joinColumns = @JoinColumn(name = "user_id"),
inverseJoinColumns = @JoinColumn(name = "role_id"))
private Set<Role> roles;
}
并且角色实体如下-
@Entity
@Table(name = "roles")
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@SQLDelete(sql = "UPDATE roles SET deleted_at = CURRENT_TIMESTAMP WHERE id = ?", check = ResultCheckStyle.COUNT)
@Where(clause = "deleted_at IS NULL")
@JsonIgnoreProperties(
value = {"createdAt", "updatedAt", "deletedAt"}
)
public class Role {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id", updatable = false, nullable = false)
private long id;
@Column(name = "title")
@NotBlank(message = "Title field must be not null")
private String title;
......
......
......
@OneToMany(targetEntity = User.class, fetch = FetchType.EAGER)
@JoinTable(name = "user_roles",joinColumns = @JoinColumn(name = "role_id"),
inverseJoinColumns = @JoinColumn(name = "user_id"))
private List<User> users;
}
如何解决这个问题?我在这里做错了吗?
由于您是直接获取列表。在指定了映射的任何地方,您都必须提及注释@JsonIgnore
。在任何地方,我并不是真的到处都是。只需使用注释,看看它如何工作。
编辑->只需在已将其映射到用户表的角色表中进行即可。然后它将在获取数据时跳过用户映射。
@JsonIgnore
private List<User> users;
最简单的方法可能是使用List<T>
注释来注释@JsonIgnoreProperties
,以打破循环依赖性。
@JsonIgnoreProperties("users")
private List<Role> roles;
@JsonIgnoreProperties("roles")
private List<User> users;