【发布时间】:2019-04-05 09:51:05
【问题描述】:
我有一个名为employee 的实体,它自己加入。联接是代表谁是该员工的经理。当我查询记录时,我得到了员工的整个层次结构。
我希望实现的是只获取经理的几个字段,而不希望获取员工经理的经理。
我尝试使用@NamedEntityGraph 执行此操作,但无法获得预期的输出。
也使用了Projections。
我也尝试过这里提到的方法
注意 - 我不想使用@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"
}
【问题讨论】:
-
您是否尝试将@NamedQuery 用于您的Employee 类?
-
对不起@Abhinav,我强烈建议不要使用
@Query或@NamedQuery来解决这个问题 -
好的!没问题,您是否尝试使用 JPA 的 createQuery 或 createNativeQuery 方法,将 query 作为参数传递?
标签: java hibernate spring-data-jpa