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