@OneToMany 列表<>与集合<>差异
如果我使用,有什么区别吗?
@OneToMany
public Set<Rating> ratings;
或者如果我使用
@OneToMany
public List<Rating> ratings;
两者都工作正常,我知道列表和集合之间的区别,但是我不知道这是否会产生任何区别 休眠(或者更确切地说是JPA 2.0)处理它。
如果我使用,有什么区别吗?
@OneToMany
public Set<Rating> ratings;
或者如果我使用
@OneToMany
public List<Rating> ratings;
两者都工作正常,我知道列表和集合之间的区别,但是我不知道这是否会产生任何区别 休眠(或者更确切地说是JPA 2.0)处理它。
如果没有指定索引列,则列表将由Hibernate作为包处理(没有特定的顺序)。
处理Hibernate的一个显着区别是,您无法在单个查询中获取两个不同的列表。例如,如果您的实体具有联系人列表和地址列表,则无法使用单个查询加载人员及其所有联系人及其所有地址。在这种情况下,解决方案是进行两个查询(这避免了笛卡尔积),或者对至少一个集合使用 a 而不是 a。Person
Set
List
当您必须定义和实体并且实体中没有不可变的功能键时,通常很难将Set与Hibernate一起使用。equals
hashCode
如果使用 List,则可以在 getter 函数中指定“Order BY”子句。你不能用一个 Set 来做到这一点。order by 子句可以包含部分 EJBQL;例如
@OneToMany
@OrderBy("lastname ASC")
public List<Rating> ratings;
如果将此字段留空,则列表将根据主键的值按升序排序。