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