Spring Данные 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;
}

Я могу получить все тесты с помощью объекта User:

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

Но какой запрос я могу использовать для поиска всех тестов с помощью userName?

Ответы

Ответ 1

Вы поймете следующую формулу:

List<Test> findByUsers_UserName(String userName)

Это использует функцию выражение свойства для Spring данных JPA. Подпись Users_UserName будет переведена на JPQL x.users.userName. Обратите внимание, что это будет выполнять точное совпадение с данным именем пользователя.

Ответ 2

Другой ответ показывает, как достичь желаемой функциональности, используя технику именования функций. Мы можем достичь такой же функциональности, используя аннотацию @Query следующим образом:

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