我有兩個表 [1]users 和 [2] employee_group
我正在嘗試實作 ManyToMany 關系,這就是我使用注釋實作的方式
@Entity
@Table(name = "employee_group")
public class EmployeeGroup {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "ID")
private long id;
@ManyToMany(mappedBy = "employeeGroups")
private List<User> users;
.........
// other properties
}
@Entity
@Table(name = "users")
public class User{
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "ID")
private long id;
@ManyToMany
@JoinTable(name = "emp_group_map",
joinColumns = { @JoinColumn(name = "fk_user") },
inverseJoinColumns = { @JoinColumn(name = "fk_emp_group") })
private List<EmployeeGroup> employeeGroups;
.........
// other properties
}
期望:我有一個用戶(例如:userId 100)和該用戶所屬的兩個員工組,所以我期望當我嘗試通過 userId saay 100 獲取該用戶時,它將獲取包含員工組串列的用戶詳細資訊和這個employeeGroups 將有兩條記錄。
問題:這會回傳嵌套結果,例如:
{
"id": 11,
"employeeGroups": [
{
"id": 1,
"users": [
{
"id": 11,
"employeeGroups": [
{
"id": 1,
"users": [
{
"id": 11,
"employeeGroups": [
{
"id": 1,
"users": [
{
"id": 11,
"employeeGroups": [
{
"id": 1,
"users": [
{
"id": 11,
我被困在這里,并沒有弄清楚到底是什么問題。我正在使用 Spring-Boot 2.6.4。
uj5u.com熱心網友回復:
Jackson 將進入User,看到了,employeeGroup所以它進入了,它有一個List<User>所以它開始檢查那些,再次獲取用戶,然后是它的員工組等。這導致潛在的 OOM。
@JsonManagedReference @JsonBackReference可能對你有用。
另外,考慮使用 DTO,因為我假設您正在嘗試將用戶從控制器中回傳(因此杰克遜將映射它)。
使用 DTO Data Transfer Object,您可以將物體和回傳的 DTO 與控制器分離,并且更容易自定義和處理回傳的內容及其結構。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/451697.html
