2

我有一個類,我在我的休眠查詢視頻,我訂購的結果Order.desc("id")。 查詢按預期工作。不過,如果我在視頻中添加@OneToMany註釋以包含註釋,我還會在同一註釋中添加一個@OrderBy(我需要的註釋爲ordered by "createdTime")。休眠OneToMany OrderBy主要查詢

@OneToMany(fetch = FetchType.LAZY, mappedBy = "videoId", cascade = CascadeType.ALL, orphanRemoval = true) 
@OrderBy("commentTime") 
public List<Comment> getComments() 

這破壞了主查詢 - 影片的回報是現在錯誤的:它定購SQL與沒有評論第一回的視頻,其次是1條評論等:

order by comments6_.commentTime asc, this_.videoId desc 

我只需要按照他們的ID對視頻進行排序。

+0

也許值得使用Hibernate的'@ Sort'而不是在檢索數據後執行內存中的排序呢?您需要爲此提供一個「比較器」。至少這樣你就知道它不會影響你的SQL。 –

回答

4

嘗試使用@Sort代替:

@OneToMany(fetch = FetchType.LAZY, mappedBy = "videoId", cascade = CascadeType.ALL, orphanRemoval = true) 
@Sort(type = SortType.COMPARATOR, comparator = CommentTimeComparator.class) 
public List<Comment> getComments() 

你知道它會不會影響你的SQL這樣。它還可以通過減輕數據庫壓力來提高性能 - 例如,如果您想要排序的同一個實體上有多個@OneToMany關聯關係。

+0

你已經度過了我的一天!非常感謝。 – tumanov

+0

@tumanov謝謝 - 很高興幫助:-) –

+0

排序已棄用,應使用SortComparator – digz6666