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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.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
Jpa 使用GenerationType.IDENTITY与GenerationType.SEQUENCE时,数据何时持久化到数据库?_Jpa - Fatal编程技术网

Jpa 使用GenerationType.IDENTITY与GenerationType.SEQUENCE时,数据何时持久化到数据库?

Jpa 使用GenerationType.IDENTITY与GenerationType.SEQUENCE时,数据何时持久化到数据库?,jpa,Jpa,上下文:JavaEE应用程序应该尽可能降低数据丢失的风险。目前,这可能以性能为代价,因为服务器上的负载没有那么高 我的理解是,GenerationType.IDENTITY在实例化对象时立即向数据库中插入操作,而GenerationType.SEQUENCE对数据库执行读取操作,以检索数据库序列的下一个值。用于此信息的源来自。如果我的理解有误,请纠正我 据我了解,,在这种情况下,是否应该优先选择GenerationType.IDENTITY而不是GenerationType.SEQUENCE,因

上下文:JavaEE应用程序应该尽可能降低数据丢失的风险。目前,这可能以性能为代价,因为服务器上的负载没有那么高

我的理解是,
GenerationType.IDENTITY
在实例化对象时立即向数据库中插入操作,而
GenerationType.SEQUENCE
对数据库执行读取操作,以检索数据库序列的下一个值。用于此信息的源来自。如果我的理解有误,请纠正我


据我了解,,在这种情况下,是否应该优先选择
GenerationType.IDENTITY
而不是
GenerationType.SEQUENCE
,因为数据会更早地持久化到数据库?

对于标记为GenerationType.IDENTITY的实体,Hibernate会立即持久化数据,因为Hibernate需要知道主键值来维护会话。但这也有缺陷,因为这一代人无法使用许多Hibernate优化技术

对于标记为GenerationType.SEQUENCE的实体,当使用session.save()或session.persist()持久化对象并填充主键时,Hibernate会在内部触发select查询。然后,它可以在刷新/提交会话时保存数据。 此外,由于实体中填充了主键,Hibernate可以在内部对这些实体使用优化技术,如JDBC批处理和所有


更多信息请参见此处-

简短的回答是,这取决于数据库。例如,Mysql不支持序列,Oracle不支持自动增量列,因此序列是唯一的选择,我认为Postgress同时支持这两个选项,并且当使用自动增量时,序列会在引擎盖下使用。这也取决于JPA提供程序。同样,身份也意味着您不能利用batch InsertsHanks!Hibernate是JPA提供程序。我会选择AUTO,让Hibernate做出判断。谢谢!也查看了,其中有关于GenerationType.IDENTITY的其他警告。在这种情况下,它将保持自动,并让Hibernate做出判断。