神通数据库创建表时主键的分类
- 以下是基于springboot jpa去分析的,由于未找到spring.jpa.properties.hibernate.dialect配置相关的类,所以用了mysql和oracle的方言去展示
- 1、使用UUID创建方言,此时主键为字符串类型,与方言联系不是特别密切,配置oracle或者mysql方言都行
- 实体类中
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id", unique = true, nullable = false)
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
- 2、使用Long类型,mysql方言展示
- 实体类中
private Long id;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name="ID",unique=true,nullable=false)
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
- -配置文件application.properties中
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5InnoDBDialect
- 数据库中给ID列绑定序列.先创建序列,然后通过数据库可视化界面或者编写sql语句创建。结果如下:
- 表中id会随着序列号去变化,缺点是插入的时候,调用jpaRepository.save()方法时,返回对象id错误,是个固定值,与数据库中id不符合
- 3、使用Long类型,oracle方言展示
- 实体类中
private Long id;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name="ID",unique=true,nullable=false)
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
或者
private Long id;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name="ID",unique=true,nullable=false)
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
- -配置文件application.properties中
spring.jpa.properties.hibernate.dialect=oorg.hibernate.dialect.Oracle10gDialect
- 数据库中会自动创建序列
- 结果如下:
表中id会随着序列号去变化。缺点是多张表所共用一个序列,这个序列为hibernate_sequence序列