Lặp vô tận JSON

 @Entity(name = "USERS")
 @JsonIgnoreProperties(value = { "listRoles", "authorities" })
  public class Users{
    @Id
@Column(name = "USER_ID", length = 6)
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "id_seq")
@SequenceGenerator(name = "id_seq", sequenceName = "user_sequence")
private Integer userId;

@Column(name = "USER_NAME", length = 50, nullable = false)
private String userName;
@Column(name = "PASS_WORD", length = 50, nullable = false)
private String passWord;
@Column(name = "FULL_NAME", length = 50, nullable = false)
private String fullName;
@Column(name = "EMAIL", length = 50, nullable = false)
private String email;
@Column(name = "PHONE", length = 11, nullable = true)
private String phone;
@ManyToMany(fetch = FetchType.EAGER)
@JoinTable(name = "USERROLE", joinColumns = { @JoinColumn(name = "USER_ID") }, 
          inverseJoinColumns = {
		@JoinColumn(name = "ROLE_ID") })
private List<Roles> listRoles;

    //getter, setter, .....
 }

 @Entity(name = "ROLES")
 public class Roles {
@Id
@Column(name = "ROLES_ID", length = 2)
@GeneratedValue(strategy = GenerationType.IDENTITY, generator = "id_seq")
@SequenceGenerator(name = "id_seq", sequenceName = "roles_sequence", allocationSize=1)
private Integer roleId;
@Column(name = "ROLES_NAME", length = 20)
private String roleName;
@ManyToMany(mappedBy = "listRoles")
private List<Users> users;
     //getter, setter, .....

Em có 2 class user và role có quan hệ manytomany. Hibernate tự generic ra 3 table user, role, user_role trong database
Em thiết kế class user có 1 list role và ngược lại, lúc này xảy ra đệ quy ==> lặp vô tận. em sử dụng @ignoreproperty để giải quyết vấn đề, nhưng bây giờ lại không có cách nào lấy được file json user có đủ các role_name của nó. Vậy có cách nào để giải quyết vấn đề không ạ

Nếu là dữ liệu quan hệ thì bạn chỉ cần thiết kế dạng 1 - 1 hoặc 1 - n. Khi cần tìm theo chiều ngược lại thì dùng truy vấn.

Nếu là dữ liệu key-value thì bạn user bạn có danh sách roleId, còn role bạn có danh sách userId.

1 Like

ý mình muốn lấy ra 1 lượt khi select cơ. vừa tìm ra rồi. dùng annotation @JSONMANAGER ở 1 bên, 1 bên la @jsonbackreference là ok

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?