自增策略 将@GeneratedValue的strategy属性的值设置为 GenerationType.AUTO即可。用于MySQL。具体如下: @Id @GeneratedValue(strategy=GenerationType.AUTO) public Integer getId(){ return this.id; ”创建表时需将主键设置为自增字段。如: create table user2( userid int auto_increment primary key, username varchar(20) JPA进阶 16。西北农林升教大学信息工程学院本科生课程
❖ 将@GeneratedValue的strategy属性的值设置为 GenerationType.AUTO即可。用于MySQL。具体如下: @Id @GeneratedValue(strategy = GenerationType.AUTO) public Integer getId() { return this.id; } ❖ 创建表时需将主键设置为自增字段。如: create table user2 ( userid int auto_increment primary key, username varchar(20) ); 自增策略 JPA进阶 •16 信息工程学院本科生课程 →→
序列策略 可用于0 racle/DB2。如使用该主键生成策略需要: ·定义主键生成器- @SequenceGenerator ·声明主键生成策略-@GeneratedValue. 必示例如下: @ld @GeneratedValue(strategy=GenerationType.SEQUENCE, generator="bookSeq") @SequenceGenerator(name="bookSeq", CREATE SEQUENCE book_seq sequenceName ="book_seq" INCREMENTAL BY 1 initialValue=11 allocationSize=1) START WITH 10000 public Integer getld(){ NOMAXVALUE NOCYCLE return this.id; CACHE 10; JPA进阶 ·17。西北农林升大学信息工程学院本科生课程
❖ 可用于Oracle/DB2。如使用该主键生成策略需要: • 定义主键生成器 - @SequenceGenerator; • 声明主键生成策略 - @GeneratedValue。 ❖ 示例如下: @Id @GeneratedValue(strategy = GenerationType. SEQUENCE, generator="bookSeq") @SequenceGenerator(name = "bookSeq", sequenceName = "book_seq" initialValue= 11 allocationSize= 1) public Integer getId() { return this.id; } 序列策略 JPA进阶 •17 信息工程学院本科生课程 CREATE SEQUENCE book_seq INCREMENTAL BY 1 START WITH 10000 NOMAXVALUE NOCYCLE CACHE 10; →→
身份列策略 用于SQL Server。示例如下: @Id @GeneratedValue(GenerationType.IDENTITY) public Integer getIdo{ return this.id; ”创建数据表时的sq|语句与自增策略的类似。 JPA进阶 18。西北农林彩教大学信息工程学院本科生课程
❖ 用于SQL Server。示例如下: @Id @GeneratedValue(GenerationType. IDENTITY) public Integer getId() { return this.id; } ❖ 创建数据表时的sql语句与自增策略的类似。 身份列策略 JPA进阶 •18 信息工程学院本科生课程 →→
主键生成策略总结 冬Sequence和l dent ity两种自动递增策略是针对一些 特殊数据库,如0 racle和SQL Server等。如数据库 类型可能会发生改变,最好不要使用该策略; ~Auto策略需要由JPA持久提供者来选择主键的生成 方式,有时不易控制。如无需对主键进行过多控制, 可以选择该种主键生成策略; ~生成表的主键生成策略最为灵活,只需在数据库中 创建用于存储主键的表即可,与数据库无关; ~如以上4中主键生成策略仍无法满足需求,可通过 一定规则来定制主键生成策略,需要编写相应代码。 JPA进阶 19。 西北农林科教大学信息工程学院本科生课程
❖ Sequence和Identity两种自动递增策略是针对一些 特殊数据库,如Oracle和SQL Server等。如数据库 类型可能会发生改变,最好不要使用该策略; ❖ Auto策略需要由JPA持久提供者来选择主键的生成 方式,有时不易控制。如无需对主键进行过多控制, 可以选择该种主键生成策略; ❖ 生成表的主键生成策略最为灵活,只需在数据库中 创建用于存储主键的表即可,与数据库无关; ❖ 如以上4中主键生成策略仍无法满足需求,可通过 一定规则来定制主键生成策略,需要编写相应代码。 主键生成策略总结 JPA进阶 •19 信息工程学院本科生课程
复合主键 复合主健由多个属性组成,例如订单项的主键通常 是由订单ID和订单项ID组成的,订单ID和订单ID则 组成复合主键。 使用复合主键,需要完成的工作如下: ·定义主键类,应该包含主键所涉及的多个属性。必须: √实现Ser ial izab|e接口; √具有默认的pub I icl的无参构造方法; √覆盖equal s和hashCode方法。 ·在实体类上利用@IdClass指定主键类,然后在相应的 (多个)主键属性上使用@Id。 使用@IdClass,声明实体的复合主键,仅能用于 find(O和getReference)方法。因而作用有限。 JPA进阶 ·20。西北农林升教大学信息工程学院本科生课程
❖ 复合主键由多个属性组成,例如订单项的主键通常 是由订单ID和订单项ID组成的,订单ID和订单ID则 组成复合主键。 ❖ 使用复合主键,需要完成的工作如下: • 定义主键类,应该包含主键所涉及的多个属性。必须: ✓实现Serializable接口; ✓具有默认的public的无参构造方法; ✓覆盖equals和hashCode方法。 • 在实体类上利用@IdClass指定主键类,然后在相应的 (多个)主键属性上使用@Id。 ❖ 使用@IdClass声明实体的复合主键,仅能用于 find()和getReference()方法。因而作用有限。 复合主键 JPA进阶 •20 信息工程学院本科生课程