9

我有一個名爲User的@Entity。它擁有一套變更如下:Spring Data Rest Pageable子集合

@OneToMany(fetch=FetchType.LAZY, cascade=CascadeType.ALL, mappedBy="user") 
private Set<Changeset> changesets = new HashSet<Changeset>(); 

我有一個UserRepository:

@Repository 
@RestResource(path = "users", rel = "users") 
public interface UserRepository extends JpaRepository<User, Long>{ } 

並有ChangesetRepository:

@Repository 
@RestResource(path = "changesets", rel = "changesets") 
public interface ChangesetRepository extends JpaRepository<Changeset, Long> { } 

調用get上http://localhost:8080/changesets/http://localhost:8080/users/產生一個尋呼響應。

如果我調用get上http://localhost:8080/users/1/changesets然後我得到一個單一陣列中的所有結果,並沒有分頁發生。

有沒有一種方法來指示春數據休息,我想通過其父用戶訪問時,返回的變更集合中分頁的方式?變更集將會快速增長,我寧願不在單個頁面中返回大量結果。

編輯:

正如威利·惠勒建議我加入這個我ChangesetRepository使其搜索:

@RestResource(path = "byUser", rel = "byUser") 
public Page<Changeset> findByUser(@Param("id") User user, Pageable p); 

我離開的關係是雙向的,而且還能夠隱藏鏈接的變更從用戶通過在變更集上使用@RestResource(exported=false)

側面說明:看來,設置爲輸出=虛假的關係隱藏的鏈接,但實際上並沒有刪除映射。/users/1/changesets不會被公佈,但它仍然有效。

回答

8

我不認爲SDR直接支持您所描述的方法。

還有另一種方法可以採取。而不是使用PersonChangeset之間的雙向關係,讓它從ChangesetPerson單向的。然後在你的ChangesetRepository包括這樣的方法:(我只是這樣做,從內存,所以你可能需要小幅調整)

@RestResource(path = "find-by-person") 
Page<Changeset> findByPerson(@Param("person") Person person, Pageable pageable); 

從設計的角度來看,我覺得這是強,無論如何,因爲我認爲一個人的變化集在有限的環境中是相關的。查詢變更集而不是將其與人員捆綁在一起可能更合適。

+0

這是一個很好的建議。我實際上實現了它,它非常好。我會用細節編輯我的帖子! –

+0

我會接受你的回答。只是想看看是否有其他人通過一些特定的SDR特定設置來啓用我想要的功能。 –

+0

應該使用'頁'作爲返回類型不是List ' –