ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
**1. 单独被注解`@Id`标记的主键** ```java /** * 只添加一个@Id注解,则插入数据时必须给id赋值 */ @Id private String id; ``` **2. `@GeneratedValue`提供的主键生成策略** ```java /** * (1)GenerationType.TABLE:使用一个特定的数据表保存主键,每插入一条数据就增1。 * (2)GenerationType.IDENTITY:自增键。 * (3)GenerationType.SEQUENCE:根据底层数据库的序列来生成主键,条件是数据库支持序列,需要与生成器generator一同使用。 * (4)GenerationType.AUTO:与GenerationType.IDENTITY同等效果,是默认选项。 * * 上面的任何一个策略,插入数据时,即使对id赋值也没有用,主键始终都是采用上面的策略生成。 */ @Id @GeneratedValue(strategy = GenerationType.AUTO) private Integer id; ``` **3. `@GenericGenerator`提供的主键生成策略** `@GenericGenerator`是Hibernate提供的自定义主键策略生成器,它需要和`@GeneratedValue`一起使用。 ```java /** * name:主键生成器的名称。 * strategy:主键生成器。 * generator:指定name的生成器名称。 * */ @Id @GenericGenerator(name = "idGenerator", strategy = "uuid") @GeneratedValue(generator = "idGenerator") private String id; ``` `@GenericGenerator(strategy="..")`可选的生成器如下: ```java ----org.hibernate.id.factory.internal.DefaultIdentifierGeneratorFactory---- public DefaultIdentifierGeneratorFactory() { //生成的主键类似:6bd9f52e-4840-417b-a5e1-435f28f36db4 this.register("uuid2", UUIDGenerator.class); //生成的主键类似:ab75d152-43ab-11ec-b61f-1831bf140125 this.register("guid", GUIDGenerator.class); //生成的主键类似:4028b8817d13d3d1017d13d3d6080000 this.register("uuid", UUIDHexGenerator.class); //生成的主键类似:4028b8817d13e8a9017d13e8ac4f0000 this.register("uuid.hex", UUIDHexGenerator.class); this.register("assigned", Assigned.class); //生成的主键类似:自增键 this.register("identity", IdentityGenerator.class); this.register("select", SelectGenerator.class); this.register("sequence", SequenceStyleGenerator.class); this.register("seqhilo", SequenceHiLoGenerator.class); this.register("increment", IncrementGenerator.class); this.register("foreign", ForeignGenerator.class); this.register("sequence-identity", SequenceIdentityGenerator.class); this.register("enhanced-sequence", SequenceStyleGenerator.class); this.register("enhanced-table", TableGenerator.class); } ```