Двунаправленное отображение, есть ли способ избежать бесконечной рекурсии? - PullRequest
0 голосов
/ 10 января 2020

У меня есть два следующих объекта:

Проект:

@Data
public class Project {

  @Id
  @GeneratedValue(strategy = GenerationType.AUTO)
  private long id;

  @OneToMany(mappedBy = "project", cascade = CascadeType.ALL, orphanRemoval = true)
  @JsonIgnore
  private List<ProjectEmployee> projectEmployees;

}

ProjectEmployee:

@Data
@IdClass(ProjectEmployeeId.class)
public class ProjectEmployee {

  @Id
  @GeneratedValue(strategy = GenerationType.AUTO)
  private long id;

  @Id
  @ManyToOne
  @JsonIgnore
  private Project project;

  @Id
  @ManyToOne
  private Employee employee;

  @ManyToOne
  private ProjectEmployeeRole projectEmployeeRole;
}

Итак, как вы видите, ProjectEmployee имеет двойной первичный ключ , Комбинация project и employee должна быть уникальной и представлять сотрудника, который добавляется в проект. Если вы добавите сотрудника в проект, вы сможете определить до одного ProjectEmployeeRole, который сотрудник имеет для этого проекта.

Моя проблема в том, что если я сделаю project.projectEmployees() ProjectEmployee в возвращенном списке имеет поля id, project, employee, projectEmployeeRole. Я, очевидно, не хочу, чтобы project был частью этого списка, потому что это может привести к некоторой бесконечной рекурсии. Есть ли способ иметь таблицу, подобную той, которую создает ProjectEmployee (двойной первичный ключ + projectEmployeeRole), иметь двунаправленное соединение с Project и позволить project.projectEmployees возвращать только объект с полями id, employee , projectEmployee (не project, потому что это опять только он)?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...