如果我使用
,有什么区别吗?@OneToMany
public Set<Rating> ratings;
或者如果我使用
@OneToMany
public List<Rating> ratings;
两者都可以正常工作,我知道列表和集合之间的区别,但是我不知道这是否会影响Hibernate(或者更确切地说是JPA 2.0)如何处理它。
Person
的实体,其中包含联系人列表和地址列表,则无法使用单个查询加载所有联系人和地址的人员。在这种情况下的解决方案是执行两个查询(避免笛卡尔积),或者将至少一个集合使用Set
代替List
。equals
和hashCode
且不存在不可变的函数键的情况下。如果你使用 List,那么你可以在 getter 函数中指定 'Order BY' 子句。但是如果使用 Set,则不能这样做。order by 子句可以包含部分 EJBQL;例如:
@OneToMany
@OrderBy("lastname ASC")
public List<Rating> ratings;
如果您将此字段留空,则根据主键的值按升序对列表进行排序。
@Sort
对一个集合进行排序的 - 只需按照文档中所述使用 SortedSet
即可。 - mabiSet
上使用@OrderBy
。在底层,Hibernate将使用OrderedSetType
,它将实例化一个LinkedHashSet
,因此顺序得到保留。此外,我建议在实体中使用LinkedHashSet
,以保持一致性。来源:https://discourse.hibernate.org/t/does-hibernate-persistentset-maintain-order-when-using-orderby/73 - Martin