@ OneTomany List < > vs Set < > different

如果我用

@OneToMany
public Set<Rating> ratings;

or if I use

@OneToMany
public List<Rating> ratings;

两者都可以工作好吧,我知道 list 和 set 之间的区别,但是我不知道这是否会影响 hibernate (或者更确切地说 JPA 2.0)处理它的方式。

58211 次浏览

如果没有指定索引列,那么列表将由 Hibernate 作为袋子处理(没有特定的排序)。

Hibernate 处理中一个显著的不同之处在于,您不能在一个查询中获取两个不同的列表。例如,如果您有一个 Person实体,它有一个联系人列表和一个地址列表,那么您将无法使用一个查询来加载包含所有联系人和所有地址的人。在这种情况下,解决方案是进行两个查询(这样可以避免笛卡儿积) ,或者对至少一个集合使用 Set而不是 List

当您必须在实体上定义 equalshashCode并且在实体中没有不可变的函数键时,通常很难使用 Set with Hibernate。

如果使用 List,那么可以在 getter 函数中指定一个“ Order BY”子句。你不能这么做。Order by 子句可以包含部分 EJBQL; 例如

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

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