Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java @OneToMany列表<&燃气轮机;vs Set<&燃气轮机;差异_Java_Jpa - Fatal编程技术网

Java @OneToMany列表<&燃气轮机;vs Set<&燃气轮机;差异

Java @OneToMany列表<&燃气轮机;vs Set<&燃气轮机;差异,java,jpa,Java,Jpa,如果我使用,有什么区别吗 @OneToMany public Set<Rating> ratings; @OneToMany 公开设定评级; 或者如果我使用 @OneToMany public List<Rating> ratings; @OneToMany 公开名单评级; 两者都可以正常工作,我知道列表和集合之间的区别,但是我不知道这是否会对hibernate(或者更确切地说是JPA2.0)处理列表的方式产生任何影响。如果没有指定索引列,hibernate只会将

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

@OneToMany
public Set<Rating> ratings;
@OneToMany
公开设定评级;
或者如果我使用

@OneToMany
public List<Rating> ratings;
@OneToMany
公开名单评级;

两者都可以正常工作,我知道列表和集合之间的区别,但是我不知道这是否会对hibernate(或者更确切地说是JPA2.0)处理列表的方式产生任何影响。

如果没有指定索引列,hibernate只会将列表作为一个包来处理(没有特定的顺序)

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


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

如果您使用列表,那么您可以在getter函数中指定一个'Order BY'子句。你不能用电视机来做那件事。order by子句可以包含部分EJBQL;比如说

@OneToMany
@OrderBy("lastname ASC")
public List<Rating> ratings;
@OneToMany
@订购人(“姓氏ASC”)
公开名单评级;

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

因为它让我对Hibernate文档进行置乱:您可以
@Sort
一个集合-只需使用
SortedSet
,如前所述。但是如果您使用SortedSet,它将使用比较器进行排序,并没有办法按照数据库的“排序依据”进行排序。因为这是一个古老的答案,我想澄清一下。目前,我们可以在
Set
上使用
@OrderBy
。在下面,Hibernate将使用
OrderedSetType
,它将实例化一个
LinkedHashSet
,因此顺序是保留的。另外,我建议在实体中使用
LinkedHashSet
,以保持一致性。来源:有关列表的详细信息,请参阅。