zoukankan      html  css  js  c++  java
  • 初学Hibernate主键生成策略

      具有业务含义的主键叫自然主键;随机生成,不具备业务含义的字段作为主键,叫代理主键。

    在表与POJO类关系映射文件XXX.hbm.xml中,可通过配置id元素下generator节点的class属性指定数据表主键生成策略<generator class="生成策略"></generator>;所谓主键生成策略就是hibernate怎样管理表的主键

    主键生成策略:1~4自动增长(1、2、3······),代理主键;5主键为字符串,代理主键;6一般用于自然主键,需要在程序里指定主键值,无法自动生成

      1、increment;代表主键是自动增长的,是由hibernate本身来管理。

              注意:数据库要支持自动增长,如MySQL,SQLserver;Oracle不可以;在多线程情况下,可能会产生主键冲突问题

      2、identity;由底层数据库生成,不由hibernate本身来管理

              注意:数据库支持自动增长,如MySQL,SQLserver;Oracle不可以;   

      3、sequence;标识符生成器利用底层数据库提供的序列来生成标识符

              注意:数据库支持序列,和hibernate程序无关,如Oracle支持,而MySQL就不可以;如Oracle数据库有序列customer_seq,则配置如:<generator class="sequence">customer_seq</generator>

      4、native;标识符依据底层数据库对自动生成标识符的支持能力,来选择使用identity,sequence,或hilo标识符生成器,如MySQL自动选择identity,Oracle自动选择sequence

      5、uuid;主键是字符串的可以用uuid来处理,随机产生32字符串

      6、assigned;一般用于自然主键,无法自动生成,需要程序指定值

      7、复合主键;需要在配置文件里指定复合主键id;如有Person类和Person表,Person表有复合主键firstName和secondName,和age字段

     <hibernate-mapping>
        <!-- 类与表关系,name类全名称,table表名 -->
        <class name="cn.hjp.domain.Person" table="Person">
        <!-- 复合主键 -->
        <composite-id>
        <key-property name="firstName"></key-property>
        <key-property name="secondName"></key-property>
        </composite-id>
        <property name="age" column="age" type="int"></property>
        </class>
        </hibernate-mapping>

        注意:Person类必须实现序列化接口Serializable

  • 相关阅读:
    树、森林和二叉树的转换
    弱校ACM奋斗史
    安徽科技学院2016-2017-1学期2013信息与计算科学12班期末测试_题解
    安徽省2016“京胜杯”程序设计大赛_K_纸上谈兵
    安徽省2016“京胜杯”程序设计大赛_J_YZK的大别墅
    安徽省2016“京胜杯”程序设计大赛_I_恶魔A+B
    安徽省2016“京胜杯”程序设计大赛_H_单身晚会
    安徽省2016“京胜杯”程序设计大赛_G_木条染色
    安徽省2016“京胜杯”程序设计大赛_F_吃在工大
    LeetCode() Merge Intervals 还是有问题,留待,脑袋疼。
  • 原文地址:https://www.cnblogs.com/hujiapeng/p/4733376.html
Copyright © 2011-2022 走看看