2

Hibernate で照会しているクラス Video があり、結果を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()

これにより、メインのクエリが中断されます。動画の戻り値が間違っています。最初にコメントなしで動画を返し、その後に 1 つのコメントが続くように SQL に命令します。

order by comments6_.commentTime asc, this_.videoId desc

動画を ID で並べ替えるだけで済みます。

4

1 に答える 1

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並べ替えが必要な同じエンティティに多数の関連付けがある場合です。

于 2013-01-08T14:26:28.550 に答える