为了账号安全,请及时绑定邮箱和手机立即绑定

Spring boot JPA 从 crudRepository 查询中获取特定列

Spring boot JPA 从 crudRepository 查询中获取特定列

jeck猫 2021-12-01 19:52:03
我试图从我的 Employee 类中的用户类中获取“名称”字段,这样我就可以避免进行额外的查询来获取用户名。目前,我只能通过这种方式获取 user_id我的用户类@Entity @Table(name="user", schema = "public") @Getter @Setter @NoArgsConstructor @Accessors(chain = true)public class User implements Serializable{    private @Id @GeneratedValue(strategy=GenerationType.AUTO) @Column(name = "user_id") Long id;    private @Column(unique = true) String email;    private String name;}我的员工班@Entity @Table(name = "employee",schema = "public") @Getter @Setter @NoArgsConstructor @Accessors(chain = true)public class Employee implements Serializable {    private @Id @GeneratedValue(strategy=GenerationType.AUTO) @Column(name = "employee_id") Long id;    @JsonIgnore @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "fk_user_id",insertable = false,updatable = false) private User user;    private @Column(name="fk_user_id") Long userId;}我知道不选择名称就无法检索名称,因此我尝试在 crudRepository 上使用自定义查询public interface EmployeeRepository extends CrudRepository<Employee, Long>{    @Query(value = "SELECT employee.*, public.user.name FROM public.employee INNER JOIN public.user ON public.user.user_id = employee.fk_user_id ", nativeQuery = true)    List<Employee> findEmployees();}查询返回我期望的内容,但我不知道如何在我的 Employee 类中获取结果列“name”欢迎任何帮助或指导,感谢阅读
查看完整描述

2 回答

?
当年话下

TA贡献1890条经验 获得超9个赞

在我看来,您应该选择Employeeonly 然后从 fetched 中获取名称User。此外,我认为您不需要本地查询:


@Query(value = "SELECT e FROM public.employee e INNER JOIN FETCH e.user")

    List<Employee> findEmployees();

}

然后:


for(Employee e: findEmplyees){

    String name = e.getUser.getName();

}


查看完整回答
反对 回复 2021-12-01
?
侃侃尔雅

TA贡献1801条经验 获得超16个赞

当您想要获取比实体类中描述的更多的数据,并且不想获取惰性关系时,您可以创建一个新类,例如一个包含您想要获取的所有属性的 DAO 类。因此,在您的情况下,可能会EmployeeDAO使用员工实体的所有属性加上userName. 然后将其用作返回的集合:


@Query(your query)

List<EmployeeDAO> findEmployees();


查看完整回答
反对 回复 2021-12-01
  • 2 回答
  • 0 关注
  • 225 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信