@OneToMany 列表<>与集合<>差异

2022-08-31 09:31:01

如果我使用,有什么区别吗?

@OneToMany
public Set<Rating> ratings;

或者如果我使用

@OneToMany
public List<Rating> ratings;

两者都工作正常,我知道列表和集合之间的区别,但是我不知道这是否会产生任何区别 休眠(或者更确切地说是JPA 2.0)处理它。


答案 1

如果没有指定索引列,则列表将由Hibernate作为包处理(没有特定的顺序)。

处理Hibernate的一个显着区别是,您无法在单个查询中获取两个不同的列表。例如,如果您的实体具有联系人列表和地址列表,则无法使用单个查询加载人员及其所有联系人及其所有地址。在这种情况下,解决方案是进行两个查询(这避免了笛卡尔积),或者对至少一个集合使用 a 而不是 a。PersonSetList

当您必须定义和实体并且实体中没有不可变的功能键时,通常很难将Set与Hibernate一起使用。equalshashCode


答案 2

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

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

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


推荐