@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
。
当你必须在实体上定义equals
和hashCode
并且在实体中没有不可变的function键时,通常很难使用Hibernate的Sets。
如果使用List,则可以在getter函数中指定“Order BY”子句。 你不能用Set来做到这一点。 order by子句可以包含部分的EJBQL; 例如
@OneToMany @OrderBy("lastname ASC") public List<Rating> ratings;
如果将此字段留空,则根据主键的值升序排列列表。