Попытка сделать собственный запрос способным принимать аргумент внутри репозитория jpa и использовать его вне предложения where. Например, я хочу каждый раз подсчитывать пользователей по разным столбцам
@Query(nativeQuery = true, value =
"select ?3, count(?3) as count \n" +
"from users inner join users_served_dates\n" +
"on users.user_id = user_served_dates.user_id\n" +
"where served_date >= ?1 and served_date < ?2\n" +
"group by ?3 \n" +
"order by ?3;")
List<Object[]> findUserCount(LocalDate startDate, LocalDate endDate, String category);
Есть ли способ выполнить sh это или всегда будет выдавать ошибку?
Попытка извлечь много различных статистических данных и предпочел бы обобщить, чем иметь массу независимых запросов
Изменить: чтобы уточнить, запрос выполняется, но вставляет: «категорию», где я хочу: категория
Edit2: Просто в если кто-то обнаружит это позже, пытаясь решить ту же проблему. Проблема заключалась в том, что JPA отказывается обрабатывать параметры как SQL, чтобы предотвратить атаки SQL инъекций. Правильным решением является использование критериев JPA. Поскольку у меня уже был написан SQL, я вместо этого решил просто использовать Entity Manager для запуска собственных запросов вне репозитория
@Autowired
EntityManager entityManager;
public void methodName(args){
Query query = entityManager.createNativeQuery(SQLString);
List<Object[]> results = query.getResultList();
}
Используйте именованные параметры там, где вы можете, и убедитесь, что при конкатенации его спецификаций c известные строки не вводятся пользователем напрямую. Даже при использовании этого подхода HQL обычно лучше, поэтому вы можете безопасно изменить БД позже