世代类型IDENTITY如何工作?它如何知道下一个要插入的主键是什么

尼克·迪夫(Nick Div)

在将实体持久存储到数据库中以及在多线程应用程序(java)中,生成类型IDENTITY如何知道下一个要插入数据库中的下一个整数是什么,两个线程是否不可能为实体获得相同的主键?

魔杖制造者

对于@Id属性,根据本文档

有几种生成唯一ID的策略。一些策略与数据库无关,而另一些策略则使用内置数据库支持。JPA支持通过GenerationType枚举值定义的几种ID生成策略:TABLE,SEQUENCE和IDENTITY。

当使用IDENTITY策略时,数据库可以自动分配下一个值。

 @Id
 @GeneratedValue(strategy=GenerationType.IDENTITY)
 private long id;

通常,在这种情况下,column的类型为auto increment

请注意,这些ID不是用Java代码生成的,而是由基础数据库分配的-数据库是为与多个连接一起使用而建立的,其中用户可以在每个连接中插入一条记录。

在Java方面,每个线程将使用一个连接工作-通常,此类代码与连接池一起使用,并从连接池借用连接-因此本质上是线程安全的。

根据本文档

身份排序使用数据库中的特殊IDENTITY列来允许数据库在插入对象行时自动为其分配ID。许多数据库(例如MySQL,DB2,SQL Server,Sybase和PostgreSQL)都支持标识列。Oracle不支持IDENTITY列,但是可以使用序列对象和触发器来模拟它们。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Xcode 调试 - 你如何知道下一个方法调用是什么?

迭代器如何知道下一个项目是什么?

下一个变量是什么类型?

如何知道数组的下一个自由位置

如何简洁地让编译器知道一个值应该是什么类型并检查它?

MYSQL如何插入下一个列ID

如何分辨super()MRO的下一个顺序是什么?

是什么导致Postgres丢失下一个ID的,我该如何解决?

表达下一个功能,它的真正作用是什么?

如何知道聚合组具有上一个/下一个值?

如何从Django的数据库中获取下一个可用的对象或主键

如何使我的“上一个”和“下一个”按钮在分页上工作?

如何计算下一个/上一个 ISO 工作日数?

键盘键“下一个组”是什么?

如何打印下一个要执行的crontab任务?

如何使bash脚本询问您是否要执行下一个段(部分)?

在枚举类型上实现“下一个”和“上一个”的最佳方法是什么?

当我仅知道下一个标签的名称时,如何获取<a href>的内容?

while 循环如何知道移动到下一个信息块?

如何知道在python中请求哪个下一个属性

如何不增加序列就知道序列的下一个值?

如何在交付/接收早期订单之前知道下一个订单的客户?在 R

如何知道下一个 getline 是否是 EOF C++

我如何让它淡出下一个名字

如何保存到下一个可用行而不是替换它

如何让图像重叠到它下面的下一个 div?

我要如何等待DispatchWorkItem的响应,然后再继续处理Dispatch队列中的下一个请求或下一个DispatchWorkItem

如何将我插入的ID从Firebase传递到下一个表单

如何插入二叉搜索树上的下一个可用节点?