在Hibernate中使用fetch join对相关集合进行排序

时间:2014-06-22 12:52:47

标签: hibernate sql-order-by hql left-join

我有一个分类表。每个类别都可以有子类别。我想从数据库中获取所有类别,并且还急切地初始化子类别集合。我希望它们都按名称属性排序。

使用Comparator效果很好,并且所有子类别都按良好顺序排序。

@OneToMany(mappedBy="parentCategory")
@Sort(type = SortType.COMPARATOR, comparator = InboxCategoryComparator.class)
private SortedSet<InboxCategory> childCategories;

[....]

Criteria criteria = openSession()
    .createCriteria(InboxCategory.class);

criteria
    .setFetchMode( "childCategories", FetchMode.JOIN )
    .setResultTransformer( Criteria.DISTINCT_ROOT_ENTITY ); 

但为什么使用ORDER BY子句不起作用,子类别是随机顺序?

@OneToMany(mappedBy="parentCategory")
private Set<InboxCategory> childCategories;

[....]

Query q = openSession().createQuery(
    "from InboxCategory category " +
    "left join fetch category.childCategories child " +
    "order by category.name desc, child.name desc");

q.setResultTransformer( new DistinctRootEntityResultTransformer() );

1 个答案:

答案 0 :(得分:0)

感谢JB Nizet的评论,解决方案变得如此简单。我应该使用List而不是Set。