2017-02-23 103 views
0

我使用Spring Data JPA作为我的存储库层和Spring安全性作为我的安全层。在我的项目中,Department和Employee之间具有以下单向一对多关系。以下是这两个实体的片段。查找由集合中的相关实体过滤的实体

@Entity 
public class Department { 
    ... 

    @OneToMany 
    @JoinColumn(name="department") 
    private Set<Employee> members;   

    ... 
} 

@Entity 
public class Employee { 
    ... 

    private String username; 

    ... 
} 

的关系必须是单向的,由于有一定的限制,我的用例之一是找到一个登录的用户的部门。

我的问题是,如何使用spring数据查询方法或jpql基于当前登录的用户(即登录的当前用户必须通过用户名字段匹配1个Employee对象)过滤出一个Department实体?

回答

0

我想通了,我怎么能要求通过Spring数据JPA @Query方法来实现,而不需要与Employee对象只是用户名进行比较。

@Query("select dept from Department dept inner join dept.members member where member.username = ?1") 
Department findDeptByQuery(String username) 
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(); 
+0

您的回答很接近。不过,我正在寻找一种不需要与对象进行比较的方法。 – Qcumber