Позиционные параметры Spring JPA вне пункта Where - PullRequest
0 голосов
/ 08 мая 2020

Попытка сделать собственный запрос способным принимать аргумент внутри репозитория 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 обычно лучше, поэтому вы можете безопасно изменить БД позже

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...