Spring Data JPA, @NamedQuery и сортировка вместе

#spring #spring-data #named-query

#spring #spring-данные #именованный запрос

Вопрос:

Я пытаюсь использовать @NamedQuery и сортировать вместе, но это не работает, я получаю сообщение об ошибке «Свойство * Не найдено для типа» (если я использую точно такой же код без параметра сортировки или с Pageable, тогда он работает нормально). Вот мои фрагменты кода.

     @Entity
    @NamedQuery(
            name = "GenerateProductXmlInput.findByFilter",
            query = "select gpxi from GenerateProductXmlInput as gpxi where "  
                    "lower(coalesce(gpxi.shop.name, '')) like lower(concat('%', :filterShopName, '%')) and "  
                    "lower(coalesce(gpxi.locale.language, '')) like lower(concat('%', :filterLocaleLanguage, '%')) and "  
                    "lower(coalesce(gpxi.currency.name, '')) like lower(concat('%', :filterCurrencyName, '%')) and "  
                    "lower(coalesce(gpxi.customerGroup.name, '')) like lower(concat('%', :filterCustomerGroupName, '%'))"
    )
    public class GenerateProductXmlInput implements Serializable {
  

 Page<GenerateProductXmlInput> findByFilter(
        @Param("filterShopName") String filterShopName,
        @Param("filterLocaleLanguage") String filterLocaleLanguage,
        @Param("filterCurrencyName") String filterCurrencyName,
        @Param("filterCustomerGroupName") String filterCustomerGroupName,
        Pageable pageable);
  

Комментарии:

1. Если вы используете Spring Data JPA, вам действительно не нужны именованные запросы. Вместо именованного запроса вы можете поместить аннотацию Spring Data @Query в свой findByFilter метод вместе с запросом.

2. Джаспер, если бы это было так, в документации Spring Data не было бы объяснения того, как использовать именованные запросы. Я использую их, потому что мне нужны 3 метода с одинаковой строкой запроса, один без чего-либо, один с sort и один с pageable, и я не хочу повторять один и тот же запрос три раза в @Query

3. Я не говорил, что вы не можете использовать именованные запросы; но есть альтернатива, которую вы могли бы попробовать. Но хорошо, у вас есть веская причина не использовать @Query аннотацию.

4. Джаспер, я всегда использую аннотацию запроса, просто в этом случае мне нужно что-то повторно используемое. Возможно, одним из вариантов было бы использовать одну и ту же конечную строку в трех запросах, но я не хочу делать это таким образом, потому что я думаю, что именованные запросы предназначены именно для этого, и, возможно, в spring data есть ошибка, из-за которой сортировка с ним не работает.