在将实体持久存储到数据库中以及在多线程应用程序(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] 删除。
我来说两句