У меня есть два следующих объекта:
Проект:
@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
, потому что это опять только он)?