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

时间:2018-10-23 06:59:20

标签: java hibernate spring-boot jpa spring-data-jpa

我正在尝试从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 个答案:

答案 0 :(得分:1)

我认为您应该只选择1995-03-22 00:00:00 +0000,然后从获取的Employee中获取名称。我也不认为您需要查询是本地的:

User

然后:

@Query(value = "SELECT e FROM public.employee e INNER JOIN FETCH e.user")
    List<Employee> findEmployees();
}

答案 1 :(得分:0)

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

@Query(your query)
List<EmployeeDAO> findEmployees();