1、对持久化对象的要求

1)提供一个无参构造器

2)提供一个标识属性,如id,通常映射为数据库表的主键字段。

3)为持久化类的字段提供get、set方法。

注:但不一定所有字段都这么做,对于不提供get、set方法的字段,在映射文件(*.hbm.xml)中要进行处理。

例如某个属性description未设置get、set方法,则其映射为:

<property name="description"  type="string"  column="descri" access="field"></property>

4)类不能定义为final的

5)若要把持久化类的实例放到set中,应重写持久化类的equals()、hashCode()方法

2、使用基本数据类型和包装类型的区别

1)基本数据类型和包装类型对应的hibernate映射类型相同(映射是一样的);

2)但基本类型可以直接运算、无法表达null、默认为0;

3)包装类默认为null,对于默认值有实际业务意义的要使用包装类

例如:Student类有一个int类型的score属性,表示学生的考试分数.int类型的score属性无法表达这样的业务需求:

* 如果score的属性为null,表示该学生的成绩是未知的,有可能得了100分,也有可能得了0分,只是暂时还不知道成绩

* 如果scope属性为0,表示学生考试成绩为0分.

* 在上面的情况中必须使用包装类型

3、 持久化类属性的策略

    propertye (默认值):

表明hibernate通过getXXX和setXXX来访问类属性。推荐使用。提高域(对象)模型透明性。

    field

hibernate通过java反射机制直接访问类属性。对于没有get与set方法的属性可设置该访问策略。

    noop

它映射Java持久化类中不存在的属性,即主要用于HQL(用query接口测试,使用hql语句)中,当数据库中有某列,而实体中不存在的情况。

 <!-- 该属性在Customer类中有get与set方法 -->
<property name="name" column="name" type="string"/> <!-- 该属性在Customer类中不存在get和set方法 -->
<property name="name" column="name" type="string" access="field" /> <!-- 该属性在Customer类中不存在,但在数据库存在该字段。
使用noop处理,查询的时候忽略该字段-->
<property name="name" column="name" type="string" access="noop"/>

属性策略示例

4、Java语言按内存地址(==)或equals()方法区分不同的对象

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

5、主键

    1)必备条件

不能为null。

唯一,不能重复。

永远不会改变。

2)主键分类

       业务主键(自然主键):在数据库表中把具有业务逻辑含义的字段作为主键,称为“自然主键(Natural Key)”。

逻辑主键(代理主键):在数据库表中采用一个与当前表中逻辑信息无关的字段作为其主键,称为“代理主键”。

       复合主键(联合主键):通过两个或者多个字段的组合作为主键。

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

代理主键:不具备业务含义的字段,该字段一般取名为“id”。(推荐)

3)生成策略

 Increment

increment 标识符生成器由 Hibernate 以递增的方式为代理主键赋值

Hibernate 会先读取表中的主键的最大值,向表中插入记录时, 就在 max(id) 的基础上递增,增量为1。

适用范围:

a  由于 increment生存标识符机制不依赖于底层数据库系统,因此它适合所有的数据库系统。

b  适用于只有单个 Hibernate 应用进程访问同一个数据库的场合,在多线程情况下会有问题。

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

Identity

identity 标识符生成器由底层数据库来负责生成标识符, 它要求底层数据库把主键定义为自动增长字段类型。

适用范围:

a  由于 identity 生成标识符的机制依赖于底层数据库系统,因此,要求底层数据库系统必须支持自动增长字段类型。支持自动增长字段类型的数据库包括:DB2、        Mysql、MSSQLServer、Sybase等。

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

Sequence

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

Hibernate 在持久化一个 News 对象时, 先从底层数据库的 news_seq 序列中获得一个唯一的标识号, 再把它作为主键值

适用范围:

a  由于 sequence 生成标识符的机制依赖于底层数据库系统的序列,因此,要求底层数据库系统必须支持序列。支持序列的数据库包括:DB2 Oracle 等。

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

      Hilo

hilo 标识符生成器由 Hibernate 按照一种 high/low 算法*生成标识符, 它从数据库的特定表的字段中获取 high 值,默认情况下,采用hibernate_unique_key表的next_hi字段。

Hibernate 在持久化一个 News 对象时, 由 Hibernate 负责生成主键值. hilo 标识符生成器在生成标识符时, 需要读取并修改 HI_TABLE 表中的 NEXT_VALUE 值.

适用范围:

a  由于 hilo 生存标识符机制不依赖于底层数据库系统, 因此它适合所有的数据库系统

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

     Native

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

适用范围:

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

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

     UUID

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

适用范围:

a  不依赖于底层数据库系统, 因此它适合所有的数据库系统

b  OID 必须为String类型

Assigned

      表示手工指定主键的值,适用于自然主键

############################# 2015-07-21新增######################################################

1、

在hibernate应用中,持久化类的访问方法有两个调用者,分别是Java应用程序和hibernate,他们之间的调用关系如下图:

当hibernate执行save、update、saveOrUpdate方法时调用Customer对象的getXXX方法获取新值或修改值传递给数据库,执行query、load、get等查询方法时调用Customer对象的setXXX方法从数据库获取customer对象并赋值。

Java应用程序调用Customer对象的getXXX()方法获取客户信息传递给用户,通过setXXX()方法设置用户输入的客户信息进行新增或更新操作。

注意:hibernate访问getXXX()、setXXX()方法时不受访问修饰符限制,即使是private也可以访问,而Java应用程序当方法访问修饰符为private时是不可访问方法的。

Hibernate 知识点梳理的更多相关文章

  1. Javascript重要知识点梳理

    Javascript重要知识点梳理 一.Javascript流程控制 js中常用的数据类型 var关键字的使用 if – else if – else switch while for 二.Javas ...

  2. Memcache知识点梳理

    Memcache知识点梳理 Memcached概念:    Memcached是一个免费开源的,高性能的,具有分布式对象的缓存系统,它可以用来保存一些经常存取的对象或数据,保存的数据像一张巨大的HAS ...

  3. [独孤九剑]Oracle知识点梳理(十)%type与%rowtype及常用函数

    本系列链接导航: [独孤九剑]Oracle知识点梳理(一)表空间.用户 [独孤九剑]Oracle知识点梳理(二)数据库的连接 [独孤九剑]Oracle知识点梳理(三)导入.导出 [独孤九剑]Oracl ...

  4. [独孤九剑]Oracle知识点梳理(九)数据库常用对象之package

    本系列链接导航: [独孤九剑]Oracle知识点梳理(一)表空间.用户 [独孤九剑]Oracle知识点梳理(二)数据库的连接 [独孤九剑]Oracle知识点梳理(三)导入.导出 [独孤九剑]Oracl ...

  5. [独孤九剑]Oracle知识点梳理(八)常见Exception

    本系列链接导航: [独孤九剑]Oracle知识点梳理(一)表空间.用户 [独孤九剑]Oracle知识点梳理(二)数据库的连接 [独孤九剑]Oracle知识点梳理(三)导入.导出 [独孤九剑]Oracl ...

  6. [独孤九剑]Oracle知识点梳理(七)数据库常用对象之Cursor

    本系列链接导航: [独孤九剑]Oracle知识点梳理(一)表空间.用户 [独孤九剑]Oracle知识点梳理(二)数据库的连接 [独孤九剑]Oracle知识点梳理(三)导入.导出 [独孤九剑]Oracl ...

  7. [独孤九剑]Oracle知识点梳理(六)数据库常用对象之Procedure、function、Sequence

    本系列链接导航: [独孤九剑]Oracle知识点梳理(一)表空间.用户 [独孤九剑]Oracle知识点梳理(二)数据库的连接 [独孤九剑]Oracle知识点梳理(三)导入.导出 [独孤九剑]Oracl ...

  8. [独孤九剑]Oracle知识点梳理(五)数据库常用对象之Table、View

    本系列链接导航: [独孤九剑]Oracle知识点梳理(一)表空间.用户 [独孤九剑]Oracle知识点梳理(二)数据库的连接 [独孤九剑]Oracle知识点梳理(三)导入.导出 [独孤九剑]Oracl ...

  9. [独孤九剑]Oracle知识点梳理(四)SQL语句之DML和DDL

    本系列链接导航: [独孤九剑]Oracle知识点梳理(一)表空间.用户 [独孤九剑]Oracle知识点梳理(二)数据库的连接 [独孤九剑]Oracle知识点梳理(三)导入.导出 [独孤九剑]Oracl ...

随机推荐

  1. 多个DLL合并成一个DLL

    多个DLL合并成一个DLL,把DLL合并到Exe中的解决方案 1:) 下载 http://download.microsoft.com/download/1/3/4/1347C99E-9DFB-425 ...

  2. This kind of launch is configured to open the Debug perspective when it suspends.

    This kind of launch is configured to open the Debug perspective when it suspends. 因为设置了断点才会弹出这个,不需要调 ...

  3. ajax通讯之格式详解

    前言: ajax的出现,一定程度上改变了js的命运,同时也被广泛使用,而jq的兴起也大大降低了ajax的使用难度.虽然,jq的ajax方法使用起来十分便利,但是大部分开发人员也仅仅只是对其中的几个属性 ...

  4. 阅读Python官方文档心得

    我会每天都阅读一些python的官方文档,并每天更新心得体会. -------------------------------------------------2016.12.08--------- ...

  5. Web APi之安装配置实现Cors跨域

    参考:http://www.cnblogs.com/CreateMyself/p/4836628.html 1.通过NuGet下载程序包,搜索程序包[Microsoft.AspNet.WebApi.C ...

  6. SQL Server附加数据库出现错误5123的正确解决方法

    因为自己有一本基于SQL Server 2005的数据库教程,里边使用的示例数据库是AdventureWorks for SQL Server 2005,而我的机子上装的是SQL Server 200 ...

  7. modelsim(3) - summary ,issue,tips

    1) the OEM of modelsim is 10 times slower than offical questa 2)how to the file full path in the mod ...

  8. 配合crond服务实现自定义周期备份MySQL数据库(使用innobackupex进行备份)

    备份 新建一个脚本/root/backup.py,内容如下: #!/usr/bin/env python# -*- coding: utf-8 -*- ''' 脚本作者:昨夜星辰 脚本作用:配合cro ...

  9. AIX 环境下动态路由

    IBM AIX v5.3操作系统环境下动态路由配置如下: 1,用命令lssrc -S routed和lssrc -S gated分别检查routed和gated子系统是是活动状态.如果这两个子系统为活 ...

  10. MSSQL日志传送出现“LSN 太晚,无法应用到数据库”

    一个月之前配置了日志传送的数据库,在今天早上收到作业警报:"LSRestore_ServerName_Databasename"运行失败,到历史记录中查看,错误信息如下 消息 20 ...