2016-10-18 2 views
0
@Query("Select u.email from User u where u.email= ?#{[0]}") 
Optional<String> getEmail(String email); 

мой вопрос, что это такое ?#{[0]} означает, что я знаю, что запрос должен возвращать электронную почту, но что означает эта строка знаков?Что это за строка знаков в jpql?

ответ

2

Это поддержка Spel в jpql. ? # {[0]} означает индексированный доступ к параметрам метода вместо использования именованного доступа. Таким образом, он представляет параметр электронной почты, который передается вашему методу getEmail: параметр с индексом 0, другими словами, ваш первый параметр, если ваша сигнатура метода была, например,

Необязательный getServiceEmail (String 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); 

Таким образом, вы можете использовать один или другой подход

+0

Разве это не то же самое, как '@Query (» Выберите u.email от пользователя u, где u.email =? 0 ")' и '@Query (« Выберите u.email от пользователя u, где u.email =: email) '? – DimaSan

+1

@Dimasan, да, он дает тот же результат Есть часто много способов «скинуть» кодовый код :) – alainlompo