如果我用有什么区别
@OneToMany
public Set<Rating> ratings;
或者如果我使用
@OneToMany
public List<Rating> ratings;
两者都工作正常,我知道列表和集合之间的区别,但是我不知道这是否会影响 hibernate(或者更确切地说是 JPA 2.0)处理它的方式。
最佳答案
如果没有指定索引列,则列表将被 Hibernate 作为一个包处理(没有特定顺序)。
处理 Hibernate 的一个显着区别是您不能在单个查询中获取两个不同的列表。例如,如果您有一个具有联系人列表和地址列表的 Person
实体,您将无法使用单个查询来加载人员及其所有联系人和所有地址。在这种情况下,解决方案是进行两个查询(避免笛卡尔积),或者对至少一个集合使用 Set
而不是 List
。
当您必须在实体上定义 equals
和 hashCode
并且在实体中没有不可变的功能键时,通常很难将 Sets 与 Hibernate 一起使用。
关于java - @OneToMany List<> vs Set<> 区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6562673/