将当前主键的值单独保存到一个数据库的表中,主键的值每次都是从指定的表中查询来获得,这种生成主键的方式也是很常用的。这种方法生成主键的策略可以适用于任何的数据库,不必担心不同数据库不兼容造成的问题。 使用以下SQL脚本创建一个表“tb_generator”,并插入两条数据,SQL脚本如下所示。 CREATE TABLE tb_generator ( id int(20) unsigned NOT NULL auto_increment, gen_name varchar(255) NOT NULL, gen_value int(20) NOT NULL, PRIMARY KEY (id) ) INSERT INTO tb_generator ( gen_name ,gen_value ) VALUES ( ''CUSTOMER_PK'',1); INSERT INTO tb_generator ( gen_name ,gen_value ) VALUES ( ''CONTACT_PK'',100); 执行SQL语句后,表中的数据如图5.1所示。 图5.1 自动生成主键表tb_generator 现在有另外两个表customer和contact,它们每次新建记录时生成主键的值分别“CUSTOMER_PK”所对应的value值加1,“CONTACT_PK”所对应的value值加1。 下面就来具体看一下如何来配置主键的生成策略,以配置“customer”表为例,步骤如下。 (1)在Entity标记主键的位置,指定主键生成策略为“GenerationType.TABLE”,具体设置如下。 @Entity @Table(name = "customer") public final class CustomerEO implements java.io.Serializable { private Integer id; @Id @GeneratedValue(strategy = GenerationType.TABLE) public Integer getId() { return this.id; } public void setId(Integer id) { this.id = id; } } (2)指定生成主键策略的名称,例如这里命名为“customer_gen”。 @Id @GeneratedValue(strategy = GenerationType.TABLE,generator="customer_gen") public Integer getId() { return this.id; } (3)使用@ TableGenerator标记定义表生成策略的具体设置,代码如下所示。 @Id @GeneratedValue(strategy = GenerationType.TABLE,generator="customer_gen") @TableGenerator(name = "customer_gen", table="tb_generator", pkColumnName="gen_name", valueColumnName="gen_value", pkColumnValue="CUSTOMER_PK", allocationSize=1 ) public Integer getId() { return this.id; }
hibernate 用表维护主键
最新推荐文章于 2018-12-21 10:52:36 发布