用途:
将当前主键的值单独保存到一个数据库的表中,主键的值每次都是从指定的表中查询来获得,这种生成主键的方式
也是很常用的。这种方法生成主键的策略可以适用于任何的数据库,不必担心不同数据库不兼容造成的问题。
@TableGenerator注解属性解释:
name属性表示该表主键生成策略的名称,它被引用在@GeneratedValue中设置的“generator”值中。
table属性表示表生成策略所持久化的表名。
catalog属性和schema具体指定表所在的目录名或是数据库名。
pkColumnName属性的值表示在持久化表中,该主键生成策略所对应键值的名称。
valueColumnName属性的值表示在持久化表中,该主键当前所生成的值,它的值将会随着每次创建累加。
pkColumnValue属性的值表示在持久化表中,该生成策略所对应的主键。
initialValue表示主键初识值,默认为0。
allocationSize表示每次主键值增加的大小,默认为50。
实现步骤:
一、创建自动生成主键表
CREATE TABLE `user_generation` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`pk_user_id_name` varchar(50) DEFAULT NULL,
`pk_user_id_value` int(50) DEFAULT NULL,
PRIMARY KEY (`id`)
)
二、所需jar包
- ant-1.7.1.jar
- antlr-2.7.6.jar
- commons-collections-3.2.1.jar
- dom4j-1.6.1.jar
- hibernate-annotations-3.4.0.GA.jar
- hibernate-commons-annotations-3.3.0.ga.jar
- hibernate-core-3.3.2.GA.jar
- hibernate-ehcache-3.3.2.GA.jar
- hibernate-jpa-2.0-api-1.0.0.Final.jar
- hibernate3.jar
- javassist-3.9.0.GA.jar
- jta-1.1.jar
- junit-4.5.jar
- junit.jar
- mysql-connector-java-5.0.8-bin.jar
- slf4j-api-1.6.1.jar
- slf4j-nop-1.6.1.jar
三、创建实体类
- package com.fk.entity;
- import java.io.Serializable;
- import javax.persistence.Column;
- import javax.persistence.Entity;
- import javax.persistence.GeneratedValue;
- import javax.persistence.GenerationType;
- import javax.persistence.Id;
- import javax.persistence.Table;
- import javax.persistence.TableGenerator;
- /**
- * @Description 用户实体
- * @author mqyl1
- */
- @Entity //表明该类是一个实体,与数据库对应
- @Table(name="T_USER") //对应数据库中的表名
- public class User implements Serializable {
- //用户ID
- private int sid;
- //用户名
- private String userName;
- //用户密码
- private String password;
- @Id //对应数据库中的主键
- @GeneratedValue(strategy=GenerationType.TABLE,//指定主键生成策略
- generator="PK_user") //对应生成策略名称
- @TableGenerator(name="PK_user", //生成策略名称
- pkColumnName="pk_user_id_name", //主键的列名
- pkColumnValue="USER_PK", //主键的值
- valueColumnName="pk_user_id_value", //生成的值 列名
- table="USER_GENERATION", //生成的表名
- //initialValue=0 [主键初识值,默认为0。]
- //catalog schema 指定表所在的目录名或是数据库名。
- allocationSize=1) //主键每次增加的大小,默认为50
- @Column(name="pk_sid") //对应pk_sid字段
- public int getSid() {
- return sid;
- }
- @Column(name="f_userName") //映射字段
- public String getUserName() {
- return userName;
- }
- @Column(name="f_password") //映射字段
- public String getPassword() {
- return password;
- }
- public void setPassword(String password) {
- this.password = password;
- }
- public void setSid(int sid) {
- this.sid = sid;
- }
- public void setUserName(String userName) {
- this.userName = userName;
- }
- public User() {
- super();
- }
- public User(String userName, String password) {
- super();
- this.userName = userName;
- this.password = password;
- }
- }