我正在使用Spring Data JPA作为我的存储库层,并将spring security作为我的安全层。在我的项目中,我在Department和Employee之间有以下单向一对多关系。以下是2个实体的片段。
@Entity
public class Department {
...
@OneToMany
@JoinColumn(name="department")
private Set<Employee> members;
...
}
@Entity
public class Employee {
...
private String username;
...
}
由于某些限制,关系必须是单向的,我的一个用例是找到登录用户的部门。
我的问题是,如何使用spring数据查询方法或jpql过滤掉当前用户登录的部门实体(即当前登录的用户必须通过用户名字段匹配1个Employee对象)?
答案 0 :(得分:1)
使用JPQL
,您可以使用MEMBER OF
集合谓词。
//Fetch <YOUR EMPLOYEE ENTITY TO MATCH> or
//Create an new EMPLOYEE object with its primary key prepopulated if you already know it.
Query query = SELECT d FROM Department d WHERE :employee MEMBER OF d.members
query.setParameter("employee", <YOUR EMPLOYEE ENTITY TO MATCH>);
query.list();
答案 1 :(得分:0)
我想出了如何通过Spring Data JPA @Query方法实现我的需求,而无需与Employee对象进行比较,只需要与用户名进行比较。
@Query("select dept from Department dept inner join dept.members member where member.username = ?1")
Department findDeptByQuery(String username)