web-dev-qa-db-ja.com

Spring Data JPA:ManyToManyのクエリ

エンティティUserおよびTestがあります

@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によるすべてのテストを見つけるためにどのクエリを使用できますか?

27
qwe asd

次のメソッドシグネチャを使用すると、必要になります。

List<Test> findByUsers_UserName(String userName)

これは、Spring Data JPAの プロパティ式 機能を使用しています。サイン Users_UserNameはJPQLに変換されますx.users.userName。これにより、指定されたユーザー名と完全に一致することに注意してください。

67
Tunaki

他の答えは、関数の命名手法を使用して目的の機能を実現する方法を示しています。次のように@Queryアノテーションを使用して同じ機能を実現できます。

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