主键生成策略中IDENTITY跟AUTO的区别,请详细说明,求解

主键生成策略中IDENTITY跟AUTO的区别,请详细说明,求解

这两个是JPA的其中两种生成器策略
JPA提供四种主键生成器策略
GenerationType.IDENTITY
多数数据库支持IDENTITY列,数据库会在新行插入时自动给ID赋值,这也叫做ID自增长列
GenerationType.Auto
把主键生成策略交给JPA厂商(Persistence Provider),由它根据具体的数据库选择合适的策略,可以是Table/Sequence/Identity中的一种。假如数据库是Oracle,则选择Sequence
GenerationType.TABLE
有时候为了不依赖于数据库的具体实现,在不同数据库之间更好的移植,可以在数据库中新建序列表来生成主键,序列表一般包含两个字段:第一个字段引用不 同的关系表,第二个字段是该关系表的最大序号。这样,只需要一张序列就可以用于多张表的主键生成。
GenerationType.SEQUENCE
Oracle不支持ID子增长列而是使用序列的机制生成主键ID

auto是mysql下的,而identity是serve_sql

IDENTITY两种策略由于针对的是特殊的一些数据库,所以如果在需求前期,未确定系统要支持的数据库类型时,最好不要使用。
AUTO自动生成策略虽然能够自动生成主键,但主键的生成规则是JPA的实现者来确定的,一旦使用了这种策略,用户没有办法控制,比如说初识值是多少,每次累加值是多少,这些只能靠JPA默认的实现来生成。对于比较简单的主键,对主键生成策略要求少时,采用的这种方式比较好。

identity:适用于short,int,long作为主键。但是这个必须使用在有自动增长数据库中.采用的是数据库底层的自动增长机制. 底层使用的是数据库的自动增长(auto_increment).像Oracle数据库没有自动增长.

不同的数据库,实现机制不同;
比如mysql可以用identity主键生成策略,但是oracle就得用sequence主键生成策略