• 映射对象标识符


    一.关系数据库按主键区分不同的记录

        在关系数据库表中,用主键来标识记录保证每条记录的唯一性, 作为主键的字段必须满足以下条件:

            .不允许为null

            .每条记录具有唯一的主键值,不允许主键值重复

            .每条记录的主键值永远不会改变

          在CUSTOMERS表中,如果把NAME字段作为主键,前提条件是:

            .每条记录的客户姓名不允许为null

            .不允许客户重名

            .不允许修改客户姓名

        NAME字段是具有业务含义的字段,把这种字段作为主键,成为自然主键。尽管也是可行的,但是不能满足不断变换的业务需求,一旦出现了允许客户重名的业务需求,就必须修改数据模型,重新定义表的主键,这给数据库的维护增加了难度。

        因此,更合理的方式是使用代理主键,既不具备业务的字段,该字段一般取名为"ID"。代理主键通常为整数类型,因为整数类型比字符串类型要节省更多的数据库空间。那么代理主键的值从何而来呢?许多数据库系统提供了自动生成代理主键值的机制。如下

         1.把主键定义为自动增长标识符类型

         2.从序列中获取自动增长的标识符

    二.java语言按内存地址不同区分不同的对象

      在java语言中,判断两个对象变量是否相等,有以下两种比较方式

         1.比较两个变量所引用的对象的内存地址是否相同

         2.比较两个变量所引用的对象的值是否相同

    三.Hibernate用对象标识符(OID)来区分对象

        从以上两节可以看出,java语言安内存地址来识别或区分同一个类的不同对象,而关系数据库安主键值来识别或区分同一个表的不同记录,Hibernate使用OID来统一两者之间的矛盾,OID是关系数据库中的主键,在java对象模型中的等价物。在运行时,Hibernate根据OID来维持数据库表中记录的对应关系。

    四. Hibernate的内置标识符生成器的用法

          定义了对象-关系映射文件,然后分别通过hbm2ddl和hbm2java工具,来生成数据库Schema和持久化类源代码。

         映射文件:

              1.IncrcmentTester.hbm.xml:演示increment标识符生成器的用法

              2.IdentitYTester.hbm.xml:演示identity标识符生成器的用法

              3.NativeTester.hbm.xml:演示native标识符生成器的用法

     五.映射自然主键

         1.映射单个自然主键

             

         2.映射复合自然主键(还在了解中)

     总结:

         

                 

  • 相关阅读:
    Kaggle & Machine Learning
    练习题目总结
    日常练习//算法类
    论文阅读
    codeforces专项
    10.26—11.1
    常见算法笔记
    DM/ML学习实践(一)
    Python常见代码
    HDU 4251 --- 主席树(划分树是正解)
  • 原文地址:https://www.cnblogs.com/yangronglin/p/5831543.html
Copyright © 2020-2023  润新知