我已经在JPA Mini Book中阅读了此段落:
"分配= 53"表示JPA存储的ID数量 在缓存中。这样的作品:启动应用程序时JPA将会 在内存中分配指定数量的ID,并将共享这些 每个新的持续实体的值。在上面的代码中,ID将 从10(初始值(到63(初始值 分配(。 当分配的ID结束数量时,JPA将从 数据库并在内存中分配53个ID。这种分配的行为 内存中的ID是优化服务器内存的好方法,因为 JPA不需要在每个插入的情况下触发数据库 像@identity方法一样获取创建的ID。
问题:
- 阅读
when the application is started JPA will allocate in memory the specified number of ids..
后,我有反射,他们谈论哪个JPA?NetBeans
或glassfish
的JPA?耳朵是否包含JPA? - 在此句子
When the number of allocated ids ends JPA will request from the database and allocate in memory 53 more ids
中,数据库中的JPA请求将是什么? - 在这里他们说
since JPA will not need to trigger the database with every insert so as to get the created id just like with the @Identity approach
,使用IDENTITY
是否意味着JPA不会使用CACHE
,并且使用SEQUENCE
表示JPA将使用CACHE
?使用这种策略(序列(并不意味着我们在数据中有一致性的风险吗?假设我们要更新20行,以便JPA尚未调用数据库,而另一个用户正在更新相同的行看到旧数据,这不是问题吗?我想念什么?请向我解释一下。预先感谢。
1-这是任何提供商都必须坚持,休眠或eclipse链接或任何其他JPA实现的JPA规范(我不知道您提到的那些(
2-我们有能够自动生成实体ID的方法(对应于表主键(,插入1-自动:这意味着自动增量,2 -sequence_generator:使用db sequence .next((,3 -table_generator:类似于序列,但使用一个带有2列的表,一个是实体名称(或相应的名称(,另一个是最大ID值,4-身份:它使用某些数据库中存在的表属性,称为标识符列。..现在回到您的问题时,当您使用分配= 53插入新记录并使用序列或表生成器时,则该值中的值或表中的值将使用此值53(因此变为63(,然后将表递增。然后,JPA将能够使用IDS 10-> 63插入实体,而不会再次击中DB
3-关于您的一致性问题,所有主题都是关于插入新行不更新和有关身份的新行,分配大小仅适用于序列和表生成器,因此,如果存在识别性,则没有任何缓存