2015-10-30 18 views
14

私はUserエンティティですべてのテストを取得することができますエンティティUserTest春データJPA:クエリ多対多

@Entity 
public class User { 
    private Long id; 
    private String userName; 
} 

@Entity 
public class Test { 
    private Long id; 

    @ManyToMany 
    private Set<User> users; 
} 

を持っている:

public interface TestRepository extends JpaRepository<EventSettings, Long> { 
    List<Test> findAllByUsers(User user); 
} 

しかし、クエリ、私はuserNameですべてのテストを見つけるために使用することができます?

答えて

37

次のメソッドのシグネチャは、あなたがしたいしたいでしょう:

List<Test> findByUsers_UserName(String userName) 

これは春データJPAのproperty expression機能を使用しています。署名Users_UserNameは、JPQL x.users.userNameに翻訳されます。これは、指定されたユーザー名に対して完全一致を実行することに注意してください。

+1

(クエリ注釈内)JPQLでこれを作る方法? –

+0

これはjoinを使用して達成できます。私の答えを見てください。 – ArslanAnjum

+0

素晴らしいソリューション、ありがとう!しばらく探していた。 – dave0688

0

その他の答えは、関数命名法を使用して、望ましい機能を達成する方法を示しています。私たちは、次のように@queryアノテーションを使用して同じ機能を実現することができます

@Query("select t from Test t join User u where u.username = :username") 
List<Test> findAllByUsername(@Param("username")String username); 
+0

しかし、なぜですか? –