我有以下結構:PlayFramework - 頁排序方式一對多關係的最後一項
public class ConversationModel extends Model {
@Id
public Long id;
@OneToMany(mappedBy="conversation", cascade= CascadeType.ALL)
public List<EventModel> events;
}
和
public abstract class EventModel extends Model {
@Id
public Long id;
public Date time;
}
現在,當我從會話模型獲取一個網頁,我要訂購他們通過數組事件中的最新條目EventModel。
我想是這樣的:
return find.where().disjunction()
.add(Expr.ilike("name", "%" + filter + "%"))
...
.orderBy("events.time desc, " + sortBy + " " + order)
.findPagedList(page, pageSize);
但是,這在某種程度上返回分頁的列表,每個事件ConversationModel的條目。 (例如,如果它有3個事件,則是相同對話的3倍) 如果我在orderBy查詢中省略「events desc」,我會得到所需的結果,但沒有正確排序。
我也嘗試在查詢中設置.setDistinct(true)
,但返回「無效的SQL語法」。
如何將所有對話分類到最新的事件條目?
感謝您的幫助。
編輯:
我設置一個示例項目,這說明問題:
https://github.com/dominik-ziegler/play-page-sort
在第一次啓動該應用程序打印的談話到控制檯:
[debug] - application - Conversation: First Conversation; ID1
[debug] - application - Conversation Last Message: Tue Jan 12 23:03:55 CET 2016
[debug] - application - ----------
[debug] - application - ----------
[debug] - application - Conversation: Second Conversation; ID2
[debug] - application - Conversation Last Message: Tue Jan 12 23:03:55 CET 2016
[debug] - application - ----------
[debug] - application - ----------
[debug] - application - Conversation: Third Conversation; ID3
[debug] - application - Conversation Last Message: Tue Jan 12 23:03:55 CET 2016
[debug] - application - ----------
但根據插入日期的順序應該是:
- 第二對話
- 三對話
- 第一次談話
檢查拉請求,也清除在這篇文章下的評論;)如果提交是你需要讓我知道我會改變答案 – biesior
你先生是一個絕對的天才!謝謝! – dominik