@OneToMany List <> vs Set <>区别

如果我使用,有没有什么区别

@OneToMany public Set<Rating> ratings; 

或者如果我使用

 @OneToMany public List<Rating> ratings; 

两个工作正常,我知道列表和一个集之间的区别,但我不知道这是如何hibernate(或JPA 2.0)如何处理它有什么区别。

一个列表,如果没有指定索引列,只会被Hibernate处理为一个包(没有特定的顺序)。

在处理Hibernate的一个显着的区别是你不能在一个查询中获取两个不同的列表。 例如,如果您的Person实体具有联系人列表和地址列表,则无法使用单个查询来加载具有所有联系人及其所有地址的人员。 在这种情况下,解决scheme是做两个查询(避免笛卡尔积),或者使用一个Set而不是至less一个集合的List

当你必须在实体上定义equalshashCode并且在实体中没有不可变的function键时,通常很难使用Hibernate的Sets。

如果使用List,则可以在getter函数中指定“Order BY”子句。 你不能用Set来做到这一点。 order by子句可以包含部分的EJBQL; 例如

 @OneToMany @OrderBy("lastname ASC") public List<Rating> ratings; 

如果将此字段留空,则根据主键的值升序排列列表。