一.概念
1. 自然主键:具有业务含义的字段作为主键
2.代理主键(推荐):不具有业务含义的字段,该字段一般称为"id".
3.在数据库表中,对主键的要求:
1)不允许为null
2.)不允许重复
3)不允许改变
二.映射文件的属性说明
1. <id>元素说明:设置持久化类的OID和表的主键的映射。 属性如下:
1)name:标识持久化类OID的属性名
2)column:设置标识属性所映射的数据库表中的列名(主键字段的名称)
3)type:指定Hibernate映射类型。Hibernate映射类型是Java类型与SQL类型的桥梁。如果没有为某个属性显式设置映射 类型,Hibernate则运用反射机制先识别持久化类的特定属性的Java类型,然后自动使用与之对应的默认的Hibernate映射类型。
4) 基本数据类型无法表达null,对于持久化类的OID推荐使用包装类型。
2. <generator>元素说明:为持久化类设置标识符生成器。
包含属性:class:指定使用的标识符生成器全限定类名或其缩写名
3. 主键生成策略的说明:
1) 除assigned适用于自然主键外,其余全都适用于代理主键。
2)increment:由Hibernate自动以递增的方式生成标识符,每次增量为1.3)identity:由底层数据库生成标识符。条件是数据库支持自动增长数据类型
4)sequence:Hibernate根据底层数据库序列生成标识符。条件是数据库支持序列
5)hilo:Hibernate根据hign/low算法生成标识符。Hibernate把特定表的字段作为"hign"值。默认情况下,采用 hibernate_unique_key表的next_hi字段
6)native:根据底层数据库对自动生成标识符的能力来选择indentity、sequence、hilo
7)uuid.hex:Hibernate采用128位的UUID算法来生成标识符。该算法能够在网络环境中生成唯一的字符串标识符。由于字符串类型的主键比整数类型的主键占用更多的数据空间,故此策略并不流行。
8)assigned:由Java程序负责 生成标识符。不能把setId()方法声明为private.并尽量避免使用自然主键。