[原创]java WEB学习笔记81:Hibernate学习之路--- 对象关系映射文件(.hbm.xml):hibernate-mapping 节点,class节点,id节点(主键生成策略),property节点

本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用

内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系。

本人互联网技术爱好者,互联网技术发烧友

微博:伊直都在0221

QQ:951226918

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

1.POJO 类和数据库的映射文件 *.hbm.xml    hibernate mapping

  1)POJO 类和关系数据库之间的映射可以用一个XML文档来定义。

   2)通过 POJO 类的数据库映射文件,Hibernate可以理解持久化类数据表之间的对应关系,也可以理解持久化类属性数据库表列之间的对应关系,如何映射主键,如何映射关联关系

  3)在运行时 Hibernate 将根据这个映射文件来生成各种 SQL 语句

  4)映射文件的扩展名为 .hbm.xml

2.映射文件说明

    hibernate-mapping

      类层次:class

         主键:id

         基本类型:property

           实体引用类: many-to-one | one-to-one

           集合:set | list | map | array

            one-to-many

             many-to-many

          子类:subclass | joined-subclass

          其它:component | any 等

        查询语句:query(用来放置查询语句,便于对数据库查询的统一管理和优化)

每个Hibernate-mapping中可以同时定义多个类. 但更推荐为每个类都创建一个单独的映射文件

3.详细介绍参数

  1)hibernate-mapping 节点

      

  2)class节点

               

  3)id 节点

    ① Hibernate 使用对象标识符(OID) 来建立内存中的对象数据库表中记录的对应关系. 对象的 OID 和数据表的主键对应. Hibernate 通过标识符生成器来为主键赋值

   ② Hibernate 推荐在数据表中使用代理主键, 即不具备业务含义的字段. 代理主键通常为整数类型, 因为整数类型比字符串类型要节省更多的数据库空间.

   ③ 在对象-关系映射文件中, <id> 元素用来设置对象标识符. <generator> 子元素用来设定标识符生成器.

   ④ Hibernate 提供了标识符生成器接口: IdentifierGenerator, 并提供了各种内置实现

      

                

1.increment 标识符生成器由 Hibernate递增的方式为代理主键赋值
  ① Hibernate 会先读取 NEWS 表中的主键的最大值, 而接下来向 NEWS 表中插入记录时, 就在 max(id) 的基础上递增, 增量为 1.
  ② 适用范围:测试
    > 由于 increment 生存标识符机制不依赖于底层数据库系统, 因此它适合所有的数据库系统
    > 适用于只有单个 Hibernate 应用进程访问同一个数据库的场合, 在集群环境下不推荐使用它
    > OID 必须为 long, int 或 short 类型, 如果把 OID 定义为 byte 类型, 在运行时会抛出异常

2.identity 标识符生成器
    ① identity 标识符生成器由底层数据库来负责生成标识符, 它要求底层数据库把主键定义为自动增长字段类型
  ② 适用范围: 适合db2/meysql 不适合 oracle
     > 由于 identity 生成标识符的机制依赖于底层数据库系统, 因此, 要求底层数据库系统必须支持自动增长字段类型. 支持自动增长字段类型的数据库包括: DB2, Mysql, MSSQLServer, Sybase 等
    > OID 必须为 long, int 或 short 类型, 如果把 OID 定义为 byte 类型, 在运行时会抛出异常

3.sequence 标识符生成器    ① sequence 标识符生成器利用底层数据库提供的序列来生成标识符.  ② Hibernate 在持久化一个 News 对象时, 先从底层数据库的 news_seq 序列中获得一个唯一的标识号, 再把它作为主键值  ③ 适用范围: 底层数据库支持序列的 orclae/db2 ,不适合 mysql     > 由于 sequence 生成标识符的机制依赖于底层数据库系统的序列, 因此, 要求底层数据库系统必须支持序列. 支持序列的数据库包括: DB2, Oracle 等     > OID 必须为 long, int 或 short 类型, 如果把 OID 定义为 byte 类型, 在运行时会抛出异常

4.hilo 标识符生成器    ① hilo 标识符生成器由 Hibernate 按照一种 high/low 算法*生成标识符, 它从数据库的特定表的字段中获取 high 值.  ② Hibernate 在持久化一个 News 对象时, 由 Hibernate 负责生成主键值. hilo 标识符生成器在生成标识符时, 需要读取并修改 HI_TABLE 表中的 NEXT_VALUE 值.  ③ 适用范围:适用于所有数据,不依赖底层数据库    > 由于 hilo 生存标识符机制不依赖于底层数据库系统, 因此它适合所有的数据库系统    > OID 必须为 long, int 或 short 类型, 如果把 OID 定义为 byte 类型, 在运行时会抛出异常

5.native 标识符生成器

  ① native 标识符生成器依据底层数据库对自动生成标识符的支持能力, 来选择使用 identity, sequence 或 hilo 标识符生成器.

  ② 适用范围: 首选这种方式

    > 由于 native 能根据底层数据库系统的类型, 自动选择合适的标识符生成器, 因此很适合于跨数据库平台开发

    > OID 必须为 long, int 或 short 类型, 如果把 OID 定义为 byte 类型, 在运行时会抛出异常

  

  4)property节点

    

  

    

  

         

  

时间: 2024-10-01 20:21:55

[原创]java WEB学习笔记81:Hibernate学习之路--- 对象关系映射文件(.hbm.xml):hibernate-mapping 节点,class节点,id节点(主键生成策略),property节点的相关文章

Hibernate之配置文件以及对象关系映射文件了解

声明:CSDN不知道怎么了,有时候就是发表不了博文.本来就是一天一篇博文,最近搞的我很郁闷.有时候一天,有时候两三天都不能发.这就属于不可抗力.没办法的,啥时能发,我就发了. 一.学习案例:关于hibernate的配置文件以及对象关系映射文件的了解. 二.案例分析: a)hibernate配置文件(hibernate.cfg.xml) 1.hibernate.dialect:数据库使用的SQL方言 2.hiebrnate.connection.driver_class:数据库的驱动程序 3.hi

hibernate 对象关系映射文件详解

POJO 类和数据库的映射文件*.hbm.xml POJO类和关系数据库之间的映射可以用一个XML文档来定义. 映射文件的扩展名为.hbm.xml 在运行时Hibernate将根据这个映射文件来生成各种SQL语句 通过POJO类的数据库映射文件,Hibernate可以理解持久化类和数据表之间的对应关系,也可以理解持久化类属性与数据库表列之间的对应关系 映射文件说明 hibernate-mapping 类层次:class 主键:id 基本类型:property 实体引用类: many-to-one

hibernate框架学习笔记4:主键生成策略、对象状态

创建一个实体类: package domain; public class Customer { private Long cust_id; private String cust_name; private String cust_source; private String cust_industry; private String cust_level; private String cust_linkman; private String cust_phone; private Stri

Hibernate学习:主键生成策略

一:标准的JPA  Annotation方式的主键生成策略: (1)AUTO - 可以是identity column类型,或者sequence类型或者table类型,取决于不同的底层数据库. 例如mysql会使用auto_increment;如果oracle数据库,则使用hibernate_sequence. (2)TABLE - 使用表保存id值(也就是会为应用的表创建一张专门保存Id的表,记录对应的表的对应最大的ID值) (3)IDENTITY - identity column (4)S

hibernate系列笔记(4)---主键生成策略

主键生成策略 常见的生成策略分为六种 1.increment 由Hibernate从数据库中取出主键的最大值(每个session只取1次),以该值为基础,每次增量为1,在内存中生成主键,不依赖于底层的数据库,因此可以跨数据库. <id name="id" column="id"> <generator class="increment" /> </id> Hibernate调用org.hibernate.id.

java框架篇---hibernate主键生成策略

Hibernate主键生成策略 1.自动增长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

从实例看hibernate的主键生成策略

学习了hibernate会发现,hibernate中有实体类,实体类的映射文件,但是我们怎么样才能知道实体类的主键是怎样的生成方式呢?hibernate提供的主键生成策略帮我们完美地解答了这个疑问.下面让我们一起从实例开始认识hibernate的实体生成策略. 一.首先通过User实体类和映射文件的实例 ?User的实体类 package com.bjpowernode.hibernate; import java.util.Set; public class User { private in

hibernate之主键生成策略

一.主键类型1.自然主键(主键本身就是表中的一个字段,实体中一个具体的属性)表中已经具有某字段,并且该字段具有业务含义作为主键,称之为自然主键. 例如:在person表中的身份证号,既是唯一的,又可以单独标识一个person 2.代理主键(主键不是实体中某个具体的属性,而是一个不相关的字段)表中原本不存在的字段,且不具备业务含义的字段作为主键,称之为代理主键.更合理的方式是使用代理主键. 二.主键生成策略主键生成策略,就是每条记录录入时,主键的生成规则.Hibernate中,提供了几个内置的主键

hibernate(四)__由表逆向创建Domain对象和对象关系映射文件

之前我们是手写Domain对象和对象关系映射文件->然后生成数据库中的Table. 现在我们反过来先在数据库中建好Table->然后用工具生成Domain对象和对象关系映射文件. 步骤: 1.创建一个web工程项目 2.通过myeclipse 提供的数据库浏览器连接到我们的数据库. ①新建一个数据库连接: ②配置数据库连接(这里借用以oracle一张图,后面都是在sql server的数据库下的配置,可以忽视不影响): ③成功之后输入登录密码进入数据库: 右键表可直接修改删除表,当然这也是相当