[@Id @GeneratedValue(strategy = GenerationType.IDENTITY)] 用于指定 主键列 和 主键增长策略 @GeneratedValue(strategy = GenerationType.IDENTITY) -- MySQL 属性: Strategy - 表示主键生成策略,取值有: > GenerationType.AUTO - 根据底层数据库自动选择(默认),若数据库支持自动增长类型,则为自动增长。 > GenerationType.INDENTITY - 根据数据库的 Identity 字段生成,支持 DB2、MySQL、MS、SQL Server、SyBase 与 HyperanoicSQL 数据库的 Identity 类型主键。 > GenerationType.SEQUENCE - 使用 Sequence 来决定主键的取值,适合 Oracle、DB2 等支持 Sequence 的数据库,一般结合 @SequenceGenerator 使用。-- 注:(Oracle 没有自动增长类型,只能用 Sequence) > GenerationType.TABLE - 使用指定表来决定主键取值,结合@TableGenerator 使用。 如: @Id @TableGenerator(name="tab_cat_gen",allocationSize=1) @GeneratedValue(Strategy=GenerationType.Table) Generator - 表示主键生成器的名称,这个属性通常和 ORM 框架相关 , 例如: Hibernate 可以指定 uuid 等主键生成方式 @SequenceGenerator — 注解声明了一个数据库序列。 属性: name - 表示该表主键生成策略名称,它被引用在@GeneratedValue 中设置的“gernerator”值中。 sequenceName - 表示生成策略用到的数据库序列名称。 initialValue - 表示主键初始值,默认为 0. allocationSize - 每次主键值增加的大小,例如设置成 1,则表示每次创建新记录后自动加 1,默认为50. 示例 : @Id @GeneratedValues(strategy=StrategyType.SEQUENCE) public int getPk() { return pk; } Hibernate 的访问类型为 field 时,在字段上进行注解声; 访问类型为 property 时,在 getter 方法上进行注释声明。
package sun.rain.amazing.javax.anno.domain; import lombok.Data; import javax.persistence.*; /** * @author sunRainAmazing */ @Entity @Data public class UserIdGeneratedValue { /** * 代表主键的命名策略 mysql下 自增 */ @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private int id; private String username; public UserIdGeneratedValue(String username) { this.username = username; } public UserIdGeneratedValue() { } } /** CREATE TABLE `user_id_generated_value` ( `id` int(11) NOT NULL AUTO_INCREMENT, `username` varchar(255) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 */