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

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

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

相关文章:

java - 如何使用 MDC 在 log4j2 中动态创建日志文件名

java - OSGi 依赖关系可视化

java - 如何在 hibernate 映射中定义可重用的 <generator> 元素

java - Spring Security - 尽管允许所有请求但未经授权

java - 请求被拒绝,因为在 spring boot 中没有找到 multipart 边界

Java ProcessBuilder 忽略空格

java - 如何在 Java 而不是 XML 中以编程方式设置 View 的重力和布局重力?

java - hibernate 自动增量 getter/setter

java - jpa-springEntitymanager.find超时不起作用

java - 实体未映射