我试图从 Employee 类中的用户类获取“name”字段,这样我就可以避免进行额外的查询来获取用户名。
目前,我只能通过这种方式获取 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;
}
我的员工类(class)
@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”
欢迎任何帮助或指导,感谢您的阅读
最佳答案
在我看来,您应该仅选择Employee
,然后从获取的User
中获取姓名。另外,我认为您不需要 native 查询:
@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();
}
关于java - Spring boot JPA从crudRepository查询中获取特定列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52942951/