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

我试图从我的 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”


欢迎任何帮助或指导,感谢阅读


jeck猫
浏览 226回答 2
2回答

当年话下

在我看来,您应该选择Employeeonly 然后从 fetched 中获取名称User。此外,我认为您不需要本地查询:@Query(value = "SELECT e FROM public.employee e INNER JOIN FETCH e.user")&nbsp; &nbsp; List<Employee> findEmployees();}然后:for(Employee e: findEmplyees){&nbsp; &nbsp; String name = e.getUser.getName();}

侃侃尔雅

当您想要获取比实体类中描述的更多的数据,并且不想获取惰性关系时,您可以创建一个新类,例如一个包含您想要获取的所有属性的 DAO 类。因此,在您的情况下,可能会EmployeeDAO使用员工实体的所有属性加上userName. 然后将其用作返回的集合:@Query(your query)List<EmployeeDAO> findEmployees();
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java