首页 > 解决方案 > 如何使用 JPA JAVA 执行 JOIN

问题描述


我想简短而清楚地解决我的问题..我正在尝试从执行联接的数据库中检索数据以获得我想要的结果..
所以我有 3 个表,

EMPLOYEE:
emp_id -- PK
name..
surname..
dob.. etc

用户:

UserID PK
Username
Pass
emp_id fk
role_id fk

角色

RoleID pk
Description

我想执行查询以获取作为用户且角色 ID = 2 的员工列表;我怎么能在 JPA 上做到这一点

我试过这个

Select e from Employee e JOIN User u Join Role r where r.roleId = 2

但它仍然无法在不过滤 ID=2 的情况下获取所有员工

谢谢大家

标签: javasqldatabasejpa

解决方案


您必须设置实体之间的关联,即定义两个实体如何相互链接。这样spring就可以将jpql转成sql并获取数据。

您将不得不编写您的用户和员工实体,例如

public class User {
...
@OneToOne
@JoinColumn //using which column name it should join
private Employee employee;

@ManyToOne
@JoinColumn
private Role role;
...
public class Employee {
...
@OneToOne(mapedBy="employee")
private User user;
...

然后你可以写你的查询

@Query("select e from Employee e LEFT JOIN e.user u LEFT JOIN u.role r where r.id = :roleId")
List<Employee> getEmployeeListByRoleId(@Param("roleId") Long roleId); 

推荐阅读