#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 есть ошибка, из-за которой сортировка с ним не работает.