Spring Data REST: параметр сортировки игнорируется - PullRequest
0 голосов
/ 08 февраля 2019

Spring Boot 2.0.1.RELEASE проект с Spring Data JPA и Spring Data REST.Кажется, что параметр sort в конечной точке REST игнорируется (но тот же метод хранилища работает в модульном тесте).Хранилище имеет следующий вид:

@RepositoryRestResource(collectionResourceRel = "orders", path = "orders")
public interface OrderRepository extends PagingAndSortingRepository<OrderEntity, Integer>, OrderRepositoryExtended {

@Query(value = "FROM OrderEntity a WHERE "
                + " (a.orderDateTime BETWEEN :dateFrom AND :dateTo) AND"
                + " ("
                + "  :searchTerm IS NULL OR"
                + "  (LOWER(a.customer.companyName) LIKE '%' || LOWER(:searchTerm) || '%') OR"
                + "  (LOWER(a.orderCode) LIKE '%' || LOWER(:searchTerm) || '%')"
                + " )"
)
Page<OrderEntity> findByOrderDateTimeBetweenAndSearchTerm(
        @RequestParam(name = "dateFrom")
        @Param("dateFrom")
        @DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME)
            LocalDateTime dateFrom,

        @RequestParam(name = "dateTo")
        @Param("dateTo")
        @DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME)
            LocalDateTime dateTo,

        @RequestParam(name = "searchTerm")
        @Param("searchTerm")
            String searchTerm,

        Pageable pageable);

}

Объект (отредактированный) выглядит следующим образом:

@Entity
@Table(name = "T_ORDERS")
@Data @NoArgsConstructor
@Cacheable(false)
public class OrderEntity {

    @Id
    @GeneratedValue(strategy= GenerationType.AUTO, generator = "native")
    @GenericGenerator(name = "native", strategy = "native")
    @Column(name = "ID_ORDER")
    @JsonProperty("id_order")
    private int id;

    @Column(name = "DATE_ORDER")
    @JsonProperty("date_order")
    private LocalDateTime orderDateTime;

}

Когда я пытаюсь вызвать его с помощью экспортированного RESTконечная точка, например:

http://localhost:8080/api/v1/orders/search/findByOrderDateTimeBetweenAndSearchTerm?dateFrom=2018-01-01T00:00:00&dateTo=2018-12-01T00:00:00&sort=orderDateTime&searchTerm=O-2018

Параметр sort игнорируется, как вы можете видеть в сгенерированном запросе (отредактирован для ясности):

select orderentit0_.id_order as id_order1_21_
...
from t_orders orderentit0_ 
cross join t_customers customeren1_ 
where 
    orderentit0_.id_customer=customeren1_.id_customer and 
    (orderentit0_.date_order between ? and ?) and 
    (? is null or lower(customeren1_.company_name) like concat('%'
lower(?)
'%') or lower(orderentit0_.order_code) like concat('%'
lower(?)
'%')) limit ?

Я уже пытался упростить выражение WHERE, удалив условия LIKE, но безуспешно.

Спасибо!

1 Ответ

0 голосов
/ 09 февраля 2019

«Экспортируемое» имя вашей недвижимости - date_order.Этот способ следует использовать не только в запросах json, но и в параметрах запроса.

@Column(name = "DATE_ORDER")
@JsonProperty("date_order")
private LocalDateTime orderDateTime;

Попробуйте выполнить следующее:

http://localhost:8080/api/v1/orders/search/findByOrderDateTimeBetweenAndSearchTerm?dateFrom=2018-01-01T00:00:00&dateTo=2018-12-01T00:00:00&sort=date_order&searchTerm=O-2018

(sort = date_order )

...