JPA主键生成策略
2015-10-03 15:30
513 查看
一.JPA自带的主键生成策略
JPA自带的主键生成策略有以下四种:AUTO:主键由程序控制,默认的主键生成策略,能够适应数据库变化,Oracle默认是序列方式,Mysql默认是主键自增长方式。
IDENTITY:主键由数据库自动生成(主要是自动增长型),Mysql支持,Oracle不支持。
SEQUENCE:根据底层数据库的序列来生成主键,条件是数据库支持序列,Oracle支持,Mysql不支持。
TABLE:使用一个特定的数据库表格来保存主键。
使用方式(对于前三种,主键一定要是整型):
AUTO类型:
@Id
@Column(name="ID")
@GeneratedValue(strategy=GenerationType.AUTO)
private Integer id;
SEQUENCE类型:
在数据库中建立了seq_payment序列:
create sequence seq_payment
minvalue 1
start with 1
increment by 1
minvalue 1 nomaxvalue
cache 20;
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE,generator="payablemoney_seq")
@SequenceGenerator(name="payablemoney_seq", sequenceName="seq_payment")
TABLE类型:
建立存储主键的表:
CREATE TABLE tb_generator (
id NUMBER NOT NULL,
gen_name VARCHAR2(255) NOT NULL,
gen_value NUMBER NOT NULL,
PRIMARY KEY(id)
)
@Id @GeneratedValue(strategy = GenerationType.TABLE, generator="payablemoney_gen") @TableGenerator(name = "pk_gen", table="tb_generator", pkColumnName="gen_name", valueColumnName="gen_value", pkColumnValue="PAYABLEMOENY_PK", allocationSize=1 )
注意:如果你使用的是JPA+Hibernate+Oracle,在使用AUTO方式时,一定要新建一个Hibernate_Sequence序列。在使用SEQUENCE方式时,如果没有指定序列,也会默认选择Hibernate_Sequence序列。
二.JPA结合Hibernate主键生成策略
自定义主键生成策略,由@GenericGenerator实现。hibernate在JPA的基础上进行了扩展,可以用@GenericGenerator引入hibernate的主键生成策略。
对于hibernate主键生成策略和各自的具体生成器之间的关系,在org.hibernate.id.IdentifierGeneratorFactory中指定了。
Java代码:
static {
GENERATORS.put("uuid", UUIDHexGenerator.class);
GENERATORS.put("hilo", TableHiLoGenerator.class);
GENERATORS.put("assigned", Assigned.class);
GENERATORS.put("identity", IdentityGenerator.class);
GENERATORS.put("select", SelectGenerator.class);
GENERATORS.put("sequence", SequenceGenerator.class);
GENERATORS.put("seqhilo", SequenceHiLoGenerator.class);
GENERATORS.put("increment", IncrementGenerator.class);
GENERATORS.put("foreign", ForeignGenerator.class);
GENERATORS.put("guid", GUIDGenerator.class);
GENERATORS.put("uuid.hex", UUIDHexGenerator.class); //uuid.hex is deprecated
GENERATORS.put("sequence-identity", SequenceIdentityGenerator.class);
}
上面十二种策略,加上native,hibernate一共默认支持十三种生成策略。
下面就uuid生成策略举例说明:
@Id
@GeneratedValue(generator = "system-uuid")
@GenericGenerator(name = "system-uuid", strategy = "uuid")
@Column(name = "GROUP_ID", unique = true, nullable = false, length = 40)
private String id;
相关文章推荐
- 如何区分SQL数据库中的主键与外键
- Mysql主键相关的sql语句集锦
- sqlserver数据库主键的生成方式小结(sqlserver,mysql)
- Shell脚本实现随机数多种方法介绍(date、random、uuid)
- 自增长键列统计信息的处理方法
- sql语句查询数据库中的表名/列名/主键/自动增长值实例
- Hibernate Oracle sequence的使用技巧
- jsp Hibernate批量更新和批量删除处理代码
- jsp hibernate的分页代码第1/3页
- JAVA+Hibernate 无限级分类
- SSH整合中 hibernate托管给Spring得到SessionFactory
- jsp hibernate 数据保存操作的原理
- MySQL查询优化:用子查询代替非主键连接查询实例介绍
- MySQL 创建主键,外键和复合主键的语句
- Oracle与Mysql主键、索引及分页的区别小结
- hibernate中的增删改查实现代码
- SQLSERVER聚集索引和主键(Primary Key)的误区认识
- 小议sqlserver数据库主键选取策略
- MySQL里Create Index 能否创建主键 Primary Key
- MySQL 主键与索引的联系与区别分析