查找由集合中的相关实体过滤的实体

时间:2017-02-23 17:01:41

标签: java jpa spring-data spring-data-jpa jpql

我正在使用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对象)?

2 个答案:

答案 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)