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

Java 使用带注释的hibernate,我希望对一对多关系进行排序,java,hibernate,annotations,Java,Hibernate,Annotations,使用带注释的hibernate,我希望一个一对多关系按“多”表上的“已创建”字段排序 到目前为止,我得到了这个,它总是以随机顺序结束: // The notes @OneToMany @JoinColumn(name="task_id") Set<TaskNote> notes; public Set<TaskNote> getNotes() {return notes;} public void setNotes(Set<TaskNote> notes)

使用带注释的hibernate,我希望一个一对多关系按“多”表上的“已创建”字段排序

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

// The notes 
@OneToMany
@JoinColumn(name="task_id")
Set<TaskNote> notes;
public Set<TaskNote> getNotes() {return notes;}
public void setNotes(Set<TaskNote> notes) {this.notes = notes;} 
//注释
@独身癖
@JoinColumn(name=“task\u id”)
记笔记;
public Set getNotes(){return notes;}
public void setNotes(Set notes){this.notes=notes;}

使用列表而不是集合。列表保留顺序,集合不保留顺序。使用列表,元素的顺序将匹配您在HQL中或使用条件为顺序指定的任何内容。

您有两个选项,可以
@OrderBy(“created”)
这将实现您在SQL中所期望的功能

您还可以
@Sort
,如果出于某种原因希望在内存中排序,则可以指定任意比较器实现


编辑:不可预测的迭代顺序是HashSet的一个实现细节,它不是Set接口契约的一部分。当您使用XML映射并指定集合上的顺序时,Hibernate将乐于使用LinkedHashSet。我假设您使用注释时也会这样做,如果不正确,请道歉。

因为两个答案都没有给出完整的解决方案:

@OneToMany
@JoinColumn(name="task_id")
@OrderBy("created")
List<TaskNote> notes;
public List<TaskNote> getNotes() {return notes;}
public void setNotes(List<TaskNote> notes) {this.notes = notes;}
@OneToMany
@JoinColumn(name=“task\u id”)
@订购人(“已创建”)
清单说明;
public List getNotes(){return notes;}
public void setNotes(列表注释){this.notes=notes;}

Set
是无序的,因此使用
List
代替,您还需要
@OrderBy
注释。

我想我需要将集合更改为列表,也许使用@OrderBy(“创建”),但它似乎对我从来都不起作用。哦,等等,现在可以了。如果有人有更好的解决方案,我仍然感兴趣。我的答案是完整的解决方案。您不需要指定@OrderBy来实现订单,您可以在如何检索数据中指定它。我认为这更灵活,因为@OrderBy不是动态的。好吧,公平地说,我猜OP问题的措辞在我看来似乎表明他们希望使用注释来始终以特定的方式排序。