У меня есть сущность по имени сотрудник, которая сама присоединяется к себе. Объединение должно представлять, кто является менеджером этого сотрудника Когда я запрашиваю записи, я получаю всю иерархию для сотрудника.
Чего я хочу добиться - это выбрать только несколько полей менеджера и не желать получать менеджера менеджера сотрудника.
Я пытался сделать это, используя @NamedEntityGraph
, но не смог получить ожидаемый результат.
Используется также Projections
.
Я также попробовал подход, упомянутый здесь
Самостоятельное присоединение JPA с использованием JoinTable
Самостоятельное соединение пружин JPA
Примечание - я не хочу использовать @Query
аннотацию
@Entity
public class Employee {
@Id
@Column(name = "employeeId", nullable = false)
private String employeeId;
@Column(name = "firstName", nullable = false)
private String firstName;
@Column(name = "lastName", nullable = false)
private String lastName;
@Column(name = "middleName")
private String middleName;
@Column(name = "dateOfJoining", nullable = false)
private LocalDate dateOfJoining;
@ManyToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "line_manager_id")
private Employee manager;
}
Фактический результат -
{
"firstName":"Super",
"lastName":"Manager",
"middleName":"",
"dateOfJoining":"2012-12-31",
"manager":{
"firstName":"Super",
"lastName":"Manager",
"middleName":"",
"dateOfJoining":"2012-12-31",
"manager":{
"firstName":"Admin",
"lastName":"User",
"middleName":"",
"dateOfJoining":"2012-12-31",
"manager":{
"firstName":"Admin",
"lastName":"User",
"middleName":"",
"dateOfJoining":"2012-12-31",
"manager": null,
"employeeId":"P67"
},
"employeeId":"P68"
},
"employeeId":"P69"
},
"employeeId":"P70"
}
Ожидаемый результат
{
"firstName":"Super",
"lastName":"Manager",
"middleName":"",
"dateOfJoining":"2012-12-31",
"manager":{
"firstName":"Super",
"lastName":"Manager",
"employeeId":"P69"
},
"employeeId":"P70"
}