首先:我假设您正在谈论两个实体之间的关系。就像是
@Entitypublic class A {@ManyToMany @JoinTable(name = "A_B", joinColumns = { @JoinColumn(name = "A_fk") }, inverseJoinColumns = { @JoinColumn(name = "B_fk") }) private Set<B> bSet = new linkedHashSet<B>();}Hibernate不会自行保留命令!
如果您查看
A从数据库中加载实体时使用的类,那么
Set``bSetis类型是
PersistentSet,是另一个的包装
Set,在我的情况下,这是正常的
HashSet。(
HashSet不保留其元素的顺序。)
即使Hibernate使用
List或
linkedHashSet,仍然不建议将实现基于自然的(不保证的)数据库顺序。对于MySQL,这是某种反模式。
但是,您可以使用
@Sort注释(
org.hibernate.annotations.Sort)来使排序明确。例如:
@oneToMany(mappedBy = "as")@Sort(type = SortType.COMPARATOR, comparator = MyBComparator.class);public SortedSet<C> cs;
ŁukaszRzeszotarski在2012年9月1日添加:
_但是我们必须记住,使用
@Sort注释会导致对内存(jvm)中的对象而不是sql中的对象进行排序。相反,我们可以使用
@OrderBy注释来在sql服务器端进行排序。我(ŁukaszRzeszotarski)认为这两个注释都有一个弱点,即默认情况下设置了排序。我(ŁukaszRzeszotarski)宁愿当“看到”使用order
by子句时,hibernate使用自己的linkedHashSet实现。



