2017-09-19 30 views
1

我通過連接兩個具有ManyToMany關係的表並通過第三個表(第一個表中存在引用)關聯來構造Pageable POJO。 我將簡化我的查詢到問題的核心。Spring Data JPA - 對已連接表進行頁面排序

@Query("SELECT new package.myDTO(t1.name, t2.description) FROM table1 t1, table2 t2 where t1.relatedtable.table2Id = t2.id") Page<myDTO> findSomething(Pageable pageable);

我所有的領域都有可排序,但因爲我是從這個查詢的休眠結果發現,它總是使用在查詢(在這種情況下,表1)提供的第一個實體來應用來排序來自我的Pageable對象。

所以,如果我想通過表2的描述進行排序,傳遞我的排序字段結果「說明」中order by t1.description而不是order by t2.description

有什麼我失蹤或者通過構建一個排序對象的任何特定的方式明確提供應在order by中使用的表格? My Repository實現JpaRepository

非常感謝。

回答

0

您可以嘗試在Pageable中傳遞「t1.description」或「t2.description」作爲排序字段,以便每次指定您想要的表格。

+0

不,不幸的是,我已經嘗試過,除非我失去了一些東西。 具體來說,如果我在Sort中添加t2.description,Hibernate的結果是'order by t1.t2.description' – Nigat

+0

你能修改查詢「SELECT new package.myDTO(t1.name,t2.description)FROM table1 t1 LEFT JOIN t1.relatedtable t2「並執行相同的測試以查看會發生什麼(假設實體T1的相關字段是T2類型)? – lzagkaretos

0

你可以嘗試使用``(在表名中使用單數的任意一邊,但在這裏不能正確顯示)來避開表名。當我使用子查詢出現類似的問題時,轉義表名似乎有助於Spring忽略它(不排除它在Sort字段名稱的前面)。