Hibernate OneToMany OrderBy搞砸主要查询

时间:2013-01-08 13:43:44

标签: hibernate one-to-many hibernate-annotations hibernate-onetomany

我有一个我在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

我只需要根据他们的ID对视频进行排序。

1 个答案:

答案 0 :(得分: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关联,则需要进行排序。