Spring JPA REST按嵌套属性排序

uii*_*iii 7 java rest spring spring-data-jpa spring-data-rest

我有实体MarketEvent.Market实体有一列:

@ManyToOne(fetch = FetchType.EAGER)
private Event event;
Run Code Online (Sandbox Code Playgroud)

接下来我有一个存储库:

public interface MarketRepository extends PagingAndSortingRepository<Market, Long> {
}
Run Code Online (Sandbox Code Playgroud)

和投影:

@Projection(name="expanded", types={Market.class})
public interface ExpandedMarket {
    public String getName();
    public Event getEvent();
}
Run Code Online (Sandbox Code Playgroud)

使用REST查询/api/markets?projection=expanded&sort=name,asc我成功获得了按市场名称排序的嵌套事件属性的市场列表:

{
    "_embedded" : {
        "markets" : [ {
            "name" : "Match Odds",
            "event" : {
                "id" : 1,
                "name" : "Watford vs Crystal Palace"
            },
            ...
        }, {
            "name" : "Match Odds",
            "event" : {
                "id" : 2,
                "name" : "Arsenal vs West Brom",
            },
            ...
        },
        ...
    }
}
Run Code Online (Sandbox Code Playgroud)

但我需要的是获取按事件名称排序的市场列表,我尝试了查询,/api/markets?projection=expanded&sort=event.name,asc但它没有用.我该怎么做才能让它发挥作用?

小智 9

基于 Spring Data JPA 文档属性表达式

...您可以在方法名称中使用 _ 来手动定义遍历点...

您可以在 REST 查询中添加下划线,如下所示:

/api/markets?projection=expanded&sort= event_name ,asc


Ale*_*dis 0

MarketRepository可能有一个named query喜欢:

public interface MarketRepository exten PagingAndSortingRepository<Market, Long> {
    Page<Market> findAllByEventByName(String name, Page pageable);
}
Run Code Online (Sandbox Code Playgroud)

您可以name从 url 获取参数@RequestParam