2017-01-23 74 views
3

我有實體MarketEventMarket實體有一欄:Spring JPA REST按嵌套屬性排序

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

接下來,我有一個存儲庫:

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

和投影:使用REST查詢/api/markets?projection=expanded&sort=name,asc

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

我獲得成功的嵌套市場名單按市場名稱排列的活動屬性:

{ 
    "_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,但沒有奏效。我應該怎麼做才能使它工作?

+0

即使對象在反序列化之前被排序,也不能保證JSon的順序。 –

+0

我不明白你的意思是什麼。它是市場的**清單,因此它必須保證訂單。 – uiii

+0

@uiii,你有沒有找到這個問題的解決方案? –

回答

1

嘗試使用,而不是一個_.

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

不幸的是它也不起作用。 – uiii

0

MarketRepository可以有一個named query,如:

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

您可以@RequestParam

+0

是的,但它不是我想要的。我希望獲得所有市場並按事件名稱排序。 – uiii

+0

好吧,那麼你可以嘗試'Order By':https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#repositories.query-methods.query-creation –

0

只是讓您從URL name PARAM降級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評論this question

排序方式嵌套屬性工作正常,我在料斗釋放,但我確實遇到以下錯誤在RC版本的英格爾斯釋放。 Ingalls版本RC版本中的錯誤。該報告爲固定,

BTW,我想這v3.0.0.M3報道,固定的,但不是和我一起工作。