春季 JPA REST 按嵌套属性排序

我有实体和. 实体有一列:MarketEventMarket

@ManyToOne(fetch = FetchType.EAGER)
private Event event;

接下来我有一个存储库:

public interface MarketRepository extends PagingAndSortingRepository<Market, Long> {
}

和投影:

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

使用 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",
            },
            ...
        },
        ...
    }
}

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


答案 1

只需降级即可发布spring.data.‌​rest.webmvcHopper

<spring.data.jpa.version>1.10.10.RELEASE</spring.data.jpa.ve‌​rsion> 
<spring.data.‌​rest.webmvc.version>‌​2.5.10.RELEASE</spri‌​ng.data.rest.webmvc.‌​version>

projection=expanded&sort=event.name,asc // works
projection=expanded&sort=event_name,asc // this works too

感谢@Alan Hay这个问题的评论

在Hopper版本中,按嵌套属性排序对我来说很好,但是我确实在Ingalls版本的RC版本的Ingalls release.bug的RC版本中遇到了以下错误。这被报告为已修复,

顺便说一句,我尝试了v3.0.0.M3,它报告了已修复但无法与我一起使用。


答案 2

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

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

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

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