Set是无序不可重复的集合,常用的实现类HashSet也是如此,另外还有个LinkedHashSet,在每个节点上通过一个链表串联起来,这样,就可以保证确定的顺序。对于希望有常量复杂度的高效存取性能要求、同时又要求排序的情况下,可以直接使用LinkedHashSet

回到正题,今天才发现这样写之后,就可以根据subTypes这个集合所映射的表中的id字段的顺序存储。

<set name="subTypes" inverse="true" order-by="id">
            <key>
                <column name="parent_id" />
            </key>
            <one-to-many class="go.derek.entity.SubType" />
        </set>

此外还可以用LinkedHashSet来给list去重。

return new ArrayList<T>(new LinkedHashSet<T>(list));

此方法,既利用set去除了重复,又使用linked保持住了原顺序。