#java #jpql
#java #jpql
Вопрос:
@Query("Select u.email from User u where u.email= ?#{[0]}")
Optional<String> getEmail(String email);
мой вопрос в том, что это ?#{[0]}
значит, я знаю, что запрос должен возвращать электронное письмо, но что означает эта строка знаков?
Ответ №1:
Это поддержка SpEL в jpql. ?#{[0]} означает индексированный доступ к параметрам метода вместо использования именованного доступа. Таким образом, он представляет параметр электронной почты, который передается вашему методу getEmail: параметр с индексом 0, другими словами, ваш первый параметр, если ваша сигнатура метода была, например
Необязательно getServiceEmail(строка email, int OfficeId);
Вы могли бы получить доступ ко второму параметру, используя ?#{[1]} со следующим
@Query("Select u.email from User u where u.email= ?#{[0]} and u.officeId=?#{[1]} ")
Optional<String> getServiceEmail(String email, int officeId);
. Другим способом получения того же результата было бы использовать именованный доступ через метод @Param
@Query("Select u.email from User u where u.email= :#{#email}")
Optional<String> getEmail(@Param("email") String email);
Таким образом, вы можете использовать тот или иной подход
Комментарии:
1. Разве это не то же
@Query("Select u.email from User u where u.email= ?0")
самое, что и и@Query("Select u.email from User u where u.email= :email)
?2. @Dimasan, да, это дает тот же результат. Часто существует много способов «скинуть» код cat 🙂