Hibernate OneToMany OrderBy испортил основной запрос
У меня есть видео класса, которое я запрашиваю в Hibernate, и я упорядочиваю результаты по Order.desc("id")
, Запрос работает как положено. Однако, если я добавлю @OneToMany
аннотации в видео, чтобы включить комментарии, я также добавляю @OrderBy
к той же аннотации (мне нужно, чтобы комментарии были ordered by "createdTime"
).
@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
Мне нужно только отсортировать видео по их идентификаторам.
1 ответ
Попробуйте использовать @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
ассоциации на том же объекте, который вы хотите сортировать.