我正在使用 Java Spring Data JPA 来实现 Postgres 数据库的 ORM,
以下是我的用例 -
表是 app_user、idcard、role、contact 和 application。
其中 1 个 app_user 只能拥有 1 个身份证,
1个app_user可以有1个角色,但是一个角色可以关联多个app_user,
一个app_user可以有多个联系人
多个app_user可以关联多个应用程序,
一个应用程序可以关联多个app_user。
app_user table -
@Getter
@Setter
@Entity
@Table(name = "app_user")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
@OneToOne(mappedBy = "user", cascade = CascadeType.ALL, orphanRemoval = true)
private IDCard idCard;
@OneToMany(mappedBy = "user", cascade = CascadeType.ALL, orphanRemoval = true)
private Set<Contact> contacts = new HashSet<>();
@ManyToMany
@JoinTable(
name = "user_application",
joinColumns = @JoinColumn(name = "user_id"),
inverseJoinColumns = @JoinColumn(name = "application_id")
)
private Set<Application> applications = new HashSet<>();
@ManyToOne
@JoinColumn(name = "role_id")
private Role role;
}
idcard table -
@Getter
@Setter
@Entity
@Table(name = "idcard")
public class IDCard {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(name = "id_number")
private String idNumber;
@OneToOne
@JoinColumn(name = "user_id")
private User user;
}
contact table -
@Getter
@Setter
@Entity
@Table(name = "contact")
public class Contact {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(name = "phone_number")
private String phoneNumber;
private String email;
@ManyToOne
@JoinColumn(name = "user_id")
private User user;
}
role table -
@Getter
@Setter
@Entity
@Table(name = "role")
public class Role {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
@OneToMany(mappedBy = "role")
private Set<User> users = new HashSet<>();
}
application table -
@Getter
@Setter
@Entity
@Table(name = "application")
public class Application {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
@ManyToMany(mappedBy = "applications")
private Set<User> users = new HashSet<>();
}
当我运行 springboot 应用程序时,我得到嵌套结果,
似乎表结构或关联不正确,我做错了什么?
使用 @JsonManagedReference 和 @JsonBackReference:
例如,在您的 User 和 IDCard 类中:
@OneToOne(mappedBy = "user", cascade = CascadeType.ALL, orphanRemoval = true)
@JsonManagedReference
private IDCard idCard;
@OneToOne
@JoinColumn(name = "user_id")
@JsonBackReference
private User user;
或者在IDCard类中使用@JsonIgnore:
@OneToOne
@JoinColumn(name = "user_id")
@JsonIgnore
private User user;