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 ассоциации на том же объекте, который вы хотите сортировать.

Другие вопросы по тегам