使用注释的hibernate,我希望对一对多的关系进行排序

使用注释的hibernate,我希望通过’many’表中的’created’字段对一对多关系进行排序。

到目前为止,我已经得到了这个,它总是以随机顺序结束:

// The notes @OneToMany @JoinColumn(name="task_id") Set notes; public Set getNotes() {return notes;} public void setNotes(Set notes) {this.notes = notes;} 

既然两个答案都没有给你完整的答案:

 @OneToMany @JoinColumn(name="task_id") @OrderBy("created") List notes; public List getNotes() {return notes;} public void setNotes(List notes) {this.notes = notes;} 

Set是无序的,所以请改用List ,你也需要@OrderBy注释。

使用List而不是Set。 List保留顺序,Set不保留。 使用List,元素的顺序将匹配您在HQL中使用ORDER BY或使用Criteria指定的任何内容。

你有两个选择,你可以@OrderBy("created") ,这将做你在SQL中所期望的。

你也可以使用@Sort ,它允许你指定一个任意的比较器实现,如果你想因为某些原因在内存中排序。

编辑:不可预测的迭代顺序是HashSet的实现细节,它不是Set接口的契约的一部分。 当您使用XML映射并在集合上指定排序时,Hibernate将很乐意使用LinkedHashSet。 我认为当你使用注释时它会做同样的事情,如果这是不正确的,我会道歉。