2017-02-23 5 views
0

私はセキュリティレイヤとして私のリポジトリレイヤとスプリングセキュリティにSpring Data JPAを使用しています。私のプロジェクトでは、私はDepartmentとEmployeeの間に以下の一方向の一対多の関係を持っています。以下は、2つのエンティティのスニペットです。コレクション内にある関連エンティティによってフィルタリングされたエンティティを検索します。

@Entity 
public class Department { 
    ... 

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

    ... 
} 

@Entity 
public class Employee { 
    ... 

    private String username; 

    ... 
} 

関係が原因一定の制限のために、単方向である必要があり、私のユースケースの一つは、ログインしているユーザーの部門を見つけることです。

私の質問は、ログインしている現在のユーザー(つまり、ログインしているユーザーがユーザー名フィールドを介して1つのEmployeeオブジェクトと一致する必要があります)に基づいてDepartmentエンティティをフィルタリングするにはどうすればよいですか?

答えて

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

関連する問題