首页 > 代码库 > Hibernate学习笔记_ID生成策略

Hibernate学习笔记_ID生成策略

一,xml生成id

 

a)    generator    

<hibernate-mapping>    <class name="com.bjsxt.hibernate.Student">                            <id name="id">            <generator class="native"></generator>        </id>        <property name="age" />        <property name="sex" />        <property name="good" type="yes_no"></property>    </class>    </hibernate-mapping>

 

b)    常用四个:native identity sequence uuid(跨平台 native uuid)

native

根据底层数据库的能力选择identity,sequence 或者hilo中的一个。(数据库自增)

identity

对DB2,MySQL, MS SQL Server,Sybase和HypersonicSQL的内置标识字段提供支持。 返回的标识符是long, short 或者int类型的。 (数据库自增)

sequence

在DB2,PostgreSQL, Oracle, SAPDB, McKoi中使用序列(sequence), 而在Interbase中使用生成器(generator)。返回的标识符是long, short或者 int类型的。(数据库自增)

 二,  注解方式:@GeneratedValue

 

a)   自定义ID

 

b)   AUTO(直接写 @GeneratedValue 相当如native)

 

         i.   默认:对 MySQL,使用auto_increment

        ii.   对 Oracle使用hibernate_sequence(名称固定)

   @Id    @GeneratedValue    public int getId() {        return id;    }    public void setId(int id) {        this.id = id;    }

 

c)   IDENTITY(@GeneratedValue(strategy=GenerationType.IDENTITY))

d)   SEQUENCE(@GeneratedValue(strategy=GenerationType.SEQUENCE))

        i.   @SequenceGenerator(可自定义在数据库生成指定的sequence名)

@Entity@Table(name="_Teacher")@SequenceGenerator(name="teacherSEQ",sequenceName="teacherSEQ_DB")    //"teacherSEQ"为@SequenceGenerator的标识名  ,"teacherSEQ_DB"为指定到数据库生成的Sequence名public class Teacher {    private int id;    private String name;    private String title;    private String money;    private Date birthDay;    private ZhiCheng zhiCheng;        @Id    @GeneratedValue(strategy=GenerationType.SEQUENCE,generator="teacherSEQ")    public int getId() {        return id;    }    public void setId(int id) {        this.id = id;    }
............}

 

        

e)   TABLE (可以忘记)

原理:就是在数据库中建立一个表,这个表包含两个字段,一个字段表示名称,另一个字段表示值。每次在添加数据时,使用第一个字段的名称,来取值作为添加数据的ID,然后再给这个值累加一个值再次存入数据库,以便下次取出使用。

@TableGenerator(        name="Teacher_GEN", //生成策略的名称        table="GENERATOR_TABLE",//在数据库生成表的名称        pkColumnName = "pk_key",//表中第一个字段的字段名 类型为varchar,key        valueColumnName = "pk_value",//表中第二个字段的字段名 int ,value        pkColumnValue="http://www.mamicode.com/Teacher", //这个策略中使用该记录的第一个字段的值(key值)            initialValue = http://www.mamicode.com/1,                //这个策略中使用该记录的第二个字段的值(value值)初始化值        allocationSize=1//每次使用数据后累加的数值    )@SequenceGenerator(name="teacherSEQ",sequenceName="teacherSEQ_DB")public class Teacher {    private int id;    private String name;    private String title;    private String money;    private Date birthDay;    private ZhiCheng zhiCheng;        @Id    @GeneratedValue(strategy=GenerationType.TABLE,generator="Teacher_GEN")    public int getId() {        return id;    }    public void setId(int id) {        this.id = id;    }
..........}

 

Hibernate学习笔记_ID生成策略