Как я могу использовать метод параметра в аннотации @Query - PullRequest
0 голосов
/ 21 мая 2018

Можно ли вызвать метод параметра внутри @Query аннотации?

Пример:

@Query("SELECT user " +
    "FROM User user " +
    "WHERE (?1.getFilter() = '*' OR user.name = ?1)");
List<User> getUsers(UserNameFilter userNameFilter);

Я знаю, что могу сделать что-то вроде этого:

@Query("SELECT user " +
    "FROM User user " +
    "WHERE (?1 = '*' OR user.name = ?1)");
List<User> getUsers(String userName);

Но когда количество фильтров увеличивается, это означает, что мне нужно изменить ряд параметров.

1 Ответ

0 голосов
/ 21 мая 2018

С помощью SpEL вы можете использовать методы bean-компонентов Spring в своих запросах, например,

@Query("select e from MyEntity e where ?#{@myBean.myMethod(#param1)} is true")
List<MyEntity> entities = getEntity(@Param("param1") String param);

Вы можете определить ваш bean-компонент любым подходящим способом, например:

@Component
public class MyBean {
    public boolean myMethod(String param) {...}
}

Или этоможет быть даже того же репо:

public interface MyRepo extends JpaRepository<MyEntity, Long> {

    @Query("select e from MyEntity e where ?#{@myRepo.myMethod(#param1)} is true")
    List<MyEntity> entities = getEntity(@Param("param1") String param);

    default boolean myMethod(String param) {...}
}

Также вы можете использовать свойства параметров в своих запросах:

@Query("select u from User u where u.firstname = ?#{#customer.firstname}")
List<User> findUsersByCustomersFirstname(@Param("customer") Customer customer);

Дополнительная информация: 1 , 2, 3

...