我有一个分类表。每个类别都可以有子类别。我想从数据库中获取所有类别,并且还急切地初始化子类别集合。我希望它们都按名称属性排序。
使用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() );
答案 0 :(得分:0)
感谢JB Nizet的评论,解决方案变得如此简单。我应该使用List而不是Set。