`
tigers20010
  • 浏览: 48625 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

传智播客—hibernate关系映射二(转载)

阅读更多

    7).控制insertupdate属性

映射属性

作用

<property> insert属性

若为false,在insert语句中不包含该字段,该字段永远不能被插入。默认值true

<property> update属性

若为falseupdate语句不包含该字段,该字段永远不能被更新。默认值为true

<class>mutable属性

若为false,等价于所有的<property>元素的update属性为false,整个实例不能被更新。默认为true

<class>dynamic-insert属性

若为true,等价于所有的<property>元素的dynamic-inserttrue,保存一个对象时,动态生成insert语句,语句中仅包含取值不为null的字段。默认false

<class>dynamic-update属性

若为true,等价于所有的<property>元素的dynamic-updatetrue,更新一个对象时,动态生成update语句,语句中仅包含取值被改变的字段。默认false

 

         8).处理SQL引用表示符

SQL语法中,表示符是指用于为数据库表、视图、字段或索引等名字的字符串,常规表示符不包括空格,也不包含特殊字符,因此无需使用引用符号。如果数据库表名或列名包含特殊字符,可以使用引用表示符。如:

<property name="name" column="’CUSTOMER NAME’" />

此时的column的指定的字段名,必须使用与括起来。

 

         9).设置类的包名

         在映射文件中包含了多个类,而这些类又在同一个包中。此时我们可以不在class属性的name属性中指定类的完整名称。首先我们在hibernate-mapping元素中添加一个package属性,之后的所有class子元素的name属性直接指定类名即可。

<hibernate-mapping package="cn.itcast.cc.hibernate">

 

二、映射对象标识符

         Java应用程序中,JVM使用地址来区分一个类的多个实例。在关系型数据库中使用主键来区分记录。在hibernate中使用OID来建立内存中的对象和关系数据库中对应的记录,其实OID就是持久化对象中的id属性对应数据库中的主键。之所以使用OID是因为hibernate的缓存技术,也需要使用OID进行自动监控。

        

1.关系数据库中的主键

         主键不能为null、唯一且永远不会改变。

         MySQL中的自动增长主键,将字段类型设置为 primary key auto_increment

         SQLServer中的自动增长主键,将字段类型设置为 primary key identity

         Oracle中的自动增长主键,需要自定义序列:create sequence seq_customer increment by 1 start with 1

 

2.JAVA对象的“主键”、Hibernate中用对象表示符(OID)来区分对象

         就是对象的地址,使用==equal()比较两个对象是否相同。

         Hibernate中使用OID来维护对象与数据记录的对应关系。

 

3.hibernate中配置OID对应关系与主键生成器

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

      <generator class="increment" />

</id>

         持久化对象的id属性与数据表格的ID字段对应,并使用hibernate提供的内置标示符生成器——incrementHibernate提供了表识符生成器接口:net.sf.hibernate.id.IdentifierGenerator,并提供了多种内置的实现。

 

4.映射对象表示符

表示符生成器

描述

Increment

适用于代理主键。由hibernate自动以递增的方式生成表识符,每次增量为1

Identity

适用于代理主键。由底层数据库生成表识符,条件是数据库支持自动增长数据类型。

Sequence

适用于代理主键。Hibernate根据底层数据库序列生成标识符,条件是数据库支持序列。

Hilo

适用于代理主键。Hibernate根据hign/low算法生成标识符。Hibernate把特定表的字段作为“hign”值。默认情况下,采用hibernate_unique_key表的next_hi字段。

Native

适用于代理主键。根据底层数据库对自动生成表示符的能力来选择identitysequencehilo

Uuid.hex

适用于代理主键。Hibernate采用128位的UUID算法来生成标识符。该算法能够在网络环境中生成唯一的字符串标识符,这种策略并不流行,因为字符串类型的主键比整数类型的主键占用更多的数据库空间。

assigned

适用于自然主键。由java程序负责生成标识符,不能把setID()方法声明为Private的。尽量避免使用自然主键。

 

5. Hibernate中的increment

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

    <generator class="increment"/>

</id>

适用范围:

1.由于不依赖与底层数据库,适合所有的数据库系统。

2.单个进程访问同一个数据库的场合,集群环境下不推荐适用。

3.OID必须为longintshort类型,如果把OID定义为byte类型,抛异常。

4.在每次插入记录时,hibernate都会先调用“select max(id) from table;”返回最大的数据表中最大的id值,然后+1设置为新记录的id。使用increment会产生多进程访问的安全问题。所以在使用不依赖与底层数据库的主键时要注意这个问题。

 

6. Hibernate中的identity

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

    <generator class="identity"/>

</id>

由底层数据库生成标识符,需要把字段定义成自增型。因为由数据库底层生成标识符,所以它是先在数据库中计算id,然后再返回id。这与increment不同,所以要使用identity防止多进程访问的安全。

 

7. Hibernate中的sequence

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

     <generator class="sequence">

            <param name="sequence">tester_id_seq</param>

     </generator>

</id>

适用范围:

底层数据库要支持序列,Oracle DB2 SAP等。

OID必须为longintshort类型。

 

7. Hibernate中的hilo

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

     <generator class="hilo">

            <param name="table">hi_value</param>

            <param name="column">next_value</param>

            <param name="max_lo">100</param>

     </generator>

</id>

使用范围:

该机制不依赖于地层数据库,因此适用于所有的数据库系统。

OID必须为longintshort类型,如果为byte类型的话,会抛出异常。

Net.sf.hibernate.id.IdentifierGeneratorException:this id generator generates Longintegershort

 

7. Hibernate中的native

<id name="id" type="native" column="ID">

     <generator class="native" />

</id>

适用范围:

该类型能根据底层数据库系统的类型,自动选择合适的标识符生成器,因此很适合于跨数据库的平台,即在同一个应用中需要连接多种数据库系统的场合。

OID与以上类同。

 

7. Hibernate中的自然主键

1).单个自然主键

<id name="id" column="NAME" type="string">

      <generator class="assigned" />

</id>

<version name="version" column="VERSION" unsaved-value="0" />

自然主键:把具有业务含义的字段作为主键叫做自然主键。

 

2).复合主键

<composite-id>

     <key-property name="name" column="NAME" type="string">

     <key-property name="companyId" column="COMPANY_ID" type="long">

</composite-id>

<version name="version" column="VERSION" unsaved-value="0" />

使用联合主键的持久化类需要实现serializable接口和覆盖equals()hashCode()方法。

<composite-id name="costomerid" class="mypack.CustomerId">

      <key-property name="name" column="NAME" type="string">

      <key-property name="companyId" column="COMPANY_ID" type="long">

</composite-id>

可以使用customId属性来设置连联合主键。

 

三、映射一对多关联关系

         一对多的关系,还有俺再重复吗?先把老徐的东西拿出来:

clip_image005

(我们的UML课程是由老徐来传授的,上课时他的图解画的很专业)

 

1.多对一单向关联关系

         我们使用订单表(orders)与客户表(customers)。订单对象(Order)中包含一个客户对象(Customer),这是对象的多对一关系(一个客户可能有多个订单)。

         我们需要向Order的映射文件中添加一个many-to-one元素:

<hibernate-mapping>

    </sp

分享到:
评论

相关推荐

    传智播客 hibernate PPT 很经典

    传智播客 hibernate PPT 很经典

    传智播客hibernate源码

    标题"传智播客hibernate源码"暗示了这是一个关于Hibernate框架的源代码学习资源,可能包含了对Hibernate框架内部机制的深入解析,以及如何在实际项目中应用Hibernate的相关示例。 描述中的内容重复,进一步确认了这...

    传智播客Hibernate课件.ppt

    传智播客Hibernate课件.ppt

    01_传智播客hibernate教程_hibernate介绍与动手入门体验

    【标题】"01_传智播客hibernate教程_hibernate介绍与动手入门体验" 涉及的是一门关于Hibernate的初学者教程,旨在帮助开发者了解并掌握这一流行的Java对象关系映射(ORM)框架。Hibernate是Java开发中的一个关键工具...

    传智播客hibernate教程

    传智播客hibernate教程.ppt传智播客hibernate教程.ppt传智播客hibernate教程.ppt传智播客hibernate教程.ppt传智播客hibernate教程.ppt

    传智播客 Hibernate源码

    【标题】"传智播客 Hibernate源码"涵盖了关于Hibernate框架的深度学习和解析,它是一个流行的Java持久层框架,用于简化数据库操作。通过研究源码,开发者可以深入理解其内部工作原理,提升数据库管理效率,并能更好...

    传智播客李勇hibernate PPT

    【传智播客李勇hibernate PPT】是一份由知名教育机构传智播客推出的关于Hibernate框架的培训资料,由讲师李勇精心制作。这份PPT详细讲解了Hibernate在实际开发中的应用,旨在帮助学员深入理解并掌握这一强大的Java...

    传智播客hibernate ppt

    【标题】"传智播客hibernate ppt"是一份由知名教育机构传智播客推出的关于Hibernate框架的培训教程,由资深讲师李勇主讲。这个PPT内容经典,深受学习者好评,旨在帮助开发者深入理解和掌握Hibernate这一强大的Java...

    传智播客_hibernate

    【传智播客 Hibernate 教程】 传智播客是一家知名的IT教育机构,其课程涵盖了各种编程技术,包括Java中的ORM框架Hibernate。本教程主要基于传智播客的PPT资料,旨在帮助学习者深入理解Hibernate的核心概念和使用...

    传智播客hibernate源码.rar

    本资料主要基于“传智播客hibernate源码.rar”进行深入剖析,旨在帮助你理解Hibernate的核心机制,提升你的编程能力。 一、Hibernate简介 Hibernate是一个开放源代码的对象关系映射(ORM)框架,它对JDBC进行了非常...

    传智播客Hibernate课件

    传智播客Hibernate课件

    02_传智播客hibernate教程_hibernate入门案例的细节分析

    【标题】:“02_传智播客hibernate教程_hibernate入门案例的细节分析” 在本教程中,我们将深入探讨Hibernate,一个流行的Java对象关系映射(ORM)框架,它简化了数据库操作,使开发者可以更加专注于业务逻辑而不是...

    传智播客 hibernate 完全学习文档

    传智播客 hibernate 完全学习文档,没有更好

    传智播客李勇hibernate

    【传智播客李勇hibernate】课程详解了ORM框架Hibernate的核心概念和技术,适合初学者和想要深入了解Hibernate的开发者。以下是对课程内容的详细解析: 1. **引入ORM框架**: - 阻抗不匹配:由于Java是面向对象的...

    传智播客2016hibernate框架学习笔记

    《传智播客2016 Hibernate框架学习笔记》是一份详实的教程,旨在帮助初学者和进阶者深入理解和掌握Hibernate框架。该资源包含了四天的学习内容,分别是day01、day02、day03和day04,涵盖了从基础到高级的多个主题。...

    传智播客李勇hibernate源码1-20课

    传智播客李勇hibernate源码1-20课,目录如下:01_hibernate介绍与动手入门体验;02_hibernate入门案例的细节分析; 03_hibernate入门案例的代码优化; 04_Session接口及get|load|persist方法 05_实体对象的三种状态...

Global site tag (gtag.js) - Google Analytics