java - 如何使用 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 的情况下获取所有员工
谢谢大家
解决方案
您必须设置实体之间的关联,即定义两个实体如何相互链接。这样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);
推荐阅读
- python - 在 Python 中访问特定属性时遇到问题
- python-3.x - 如果列表中的元素在另一个列表中的另一个元素的范围内
- git - 如何正确地将 git ssh 密钥作为参数传递给 Dockerfile 并在执行 git clone 时引用它
- python - setuptools 如何将模块添加到运行时?
- tensorflow - 为 TFliteconverter 创建代表性数据集的正确方法是什么?
- mongodb - 比较 mongodb 中 $where 子句中的字段
- c# - 如何发布 Web API
- java - 如何在 Clojure 中直接使用位?
- javascript - 刷新剃须刀页面时运行 OnGetAsync 方法
- react-native - React-Native Expo 应用程序 Auth0 登录,AuthSession - authURL 失败