С помощью 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