码迷,mamicode.com
首页 > Web开发 > 详细

Hibernate学习笔记_ID生成策略

时间:2014-12-02 22:02:57      阅读:241      评论:0      收藏:0      [点我收藏+]

标签:style   blog   io   ar   color   os   使用   sp   strong   

一,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="Teacher", //这个策略中使用该记录的第一个字段的值(key值)
            initialValue = 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生成策略

标签:style   blog   io   ar   color   os   使用   sp   strong   

原文地址:http://www.cnblogs.com/enjoy-life-clh/p/4138065.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!