zoukankan      html  css  js  c++  java
  • 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="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;
        }
    .......... }
  • 相关阅读:
    简道云--编辑应用入门
    虚拟机迁移
    KVM虚拟化网络管理(一)
    keepalived概述
    kvm虚拟化存储管理
    免密登录gitlab
    KVM虚拟化介绍
    Jenkins+Git+Gitlab+Ansible实现持续集成自动化部署静态网站
    Jenkins+Git+Gitlab+Ansible实现持续集成自动化部署动态网站
    Jenkins凭证介绍
  • 原文地址:https://www.cnblogs.com/enjoy-life-clh/p/4138065.html
Copyright © 2011-2022 走看看