Hibernate主键生成策略和一对一,一对多的有关内容

来源:互联网 发布:自己实现数据库 编辑:程序博客网 时间:2024/05/17 23:50

一.  Hibernate主键生成策略有七个:

        <数字>1. increment:由Hibernate框架生成,会去查询数据库中最大值,适应任何数据库

                           <generator class="sequence">

                                   <param name="sequence">数据库sequence名字</param>

                            </generator>

                      2. sequence: 数据库的sequence生成,只适应Oracle数据库

                      3. identity的自动增长方式

                     适用于MySQL、DB2、MS SQL Server,采用数据库生成的主键,用于为long、short、int类型生成唯一标识,使用SQL Server                  和 MySQL 的自增字段,这个方法不能放到 Oracle 中,Oracle 不支持自增字段,要设定sequence(MySQL 和 SQL Server 中很常                    用)数据库中的语法如下:MySQL:create table t_user(id int auto_increment primary key, name varchar(20));SQL                            Server:create table t_user(id int identity(1,1) primary key, name varchar(20));

                  <id name="id" column="id" type="long">

                       <generator class="identity" />

                   </id>

                  4. native会根据底层数据库的能力,从identity、sequence、hilo中选择一个,灵活性更强,但此时,如果选择sequence或者hilo,                 则所有的表的主键都会从Hibernate默认的sequence或者hilo表中取。并且,有的数据库对于默认情况主键生成测试的支持,效率并不是                 很高,对于 oracle 采用 Sequence 方式,对于MySQL 和 SQL Server 采用identity(自增主键生成机制),native就是将主键的生成                 工作交由数据库完成,hibernate不管(很常用)

                        <id name="id" column="id">

                             <generator class="native" />
                        </id>

           <字符串>5. asslgned:由框架判断底层数据库的类型,并由数据库生成

                       6. uuid:框架生成32位的字符串,作为表的主键,适应于所有数据库

                           使用一个128-bit的UUID算法生成字符串类型的标识符,UUID被编码成一个32位16进制数字的字符串。UUID包含:IP地                        址、JVM启动时间、系统时间(精确到1/4秒)和一个计数器值(JVM中唯一)hibernate会算出一个128位的唯一值插入

                                    <id name="id" column="id">
                                            <generator class="uuid.hex" />
                                    </id>

                       uuid.string

                                   hibernate会算出一个16位的值插入

                           7. foreign使用外部表的字段作为主键

二. 一对一,一对多有关内容:

                                   eg: 人 身份证之间的关系                                                            

                                   实体类: 1. 主表和从表之分  2. 主表中有从表的属性,从表中有主表的属性

     one-to-one                映射文件: 1. 主表:<one-to-one name="主表中定义从表的对象名" class="从表类全限名">

                                                2. 主键的生成策略:foreign

                                                     <generator class="foreign">

                                                          <param name="property">从表中定义主表的对象名</param>

                                                     </generator>

                                                3. 从表: <one-to-one name="从表中定义主表的对象名" class="表类全限名">

                                   CRUO: 1. 添加:设置级联

                                             2. 删除: 如果要删除从表,则必须设设置: 主表的从表属性为NULL








原创粉丝点击