首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

Hibernate中标识符的门类和应用详解

2012-09-18 
Hibernate中标识符的类型和应用详解标识符生成器?????????????????????????? ?? 描述Increment?适用于代理

Hibernate中标识符的类型和应用详解

标识符生成器?????????????????????????? ?? 描述
Increment?适用于代理主键。????? 由hibernate自动以递增的方式生成标识符,每次增量为1
Identity?适用于代理主键。??????? ?由底层数据库生成标识符。条件是数据库支持自动增长数据类型。
Sequence?适用于代理主键。????? Hibernate根据底层数据库序列生成标识符。条件是数据库支持序列。
Hilo?适用于代理主键。????????????? ?Hibernate根据hign/low算法生成标识符。Hibernate把特定表的字段作为“hign”值。? 默认情况下,采用hibernate_unique_key表的next_hi字段。


Native?适用于代理主键。?????????? 根据底层数据库对自动生成标识符的能力来选择identity、sequence、hilo
Uuid.hex?适用于代理主键。???????? Hibernate采用128位的UUID算法来生成标识符。该算法能够在网络环境中生成唯一的字符串标识符,这种策略并不流行,因为字符串类型的主键比整数类型的主键占用更多的数据库空间。


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

?

====================

ncrement:使用increment方式时,hibernate将按照递增的方式设定主键,具体的方式是,先获取当前记录主键的最大值,然后再将该值加1作为主键。

select max(id) from table;

<id name=“id” type=“long” column=“ID”>
????? <generator class=“increment”/>
</id>
适用范围:
1。由于不依赖与底层数据库,适合所有的数据库系统。
2。单个进程访问同一个数据库的场合,集群环境下不推荐适用。
3。OID必须为long、int或short类型,如果把OID定义为byte类型,抛异常。

====================

Identity:identity方式表示数据库的主键生成方式为采用数据库的主键生成机制,例如SQL Server或MySQL的自动主键生成机制。
? 由底层数据库生成标识符.需要把字段定义成自增型。
? my sql 中为auto_increment
? ms sql server中为identity
? <generator? class=“identity” />
//////////////////////////////////////////
使用mysql
????? <generator 的字段的名

segment_value(可选,默认为 default):我们为这个生成器获取增量值的 segment 的
"segment key"
initial_value(可选 — 默认是 1):从表里获取的初始值
increment_size(可选 — 默认是 1):对表随后的调用应该区分的值


<id name="id" type="long" column="id">
?<generator type="java.lang.String">
??????????????? <column name="FIRSTNAME" length="16" />
??????????? </key-property>
??????????? <key-property name="lastname" type="java.lang.String">
??????????????? <column name="LASTNAME" length="16" />
??????????? </key-property>
? </composite-id>

?

可以使用StudentsinfoId属性来设置联合主键
?<composite-id name="id" type="java.lang.String">
??????????????? <column name="FIRSTNAME" length="16" />
??????????? </key-property>
??????????? <key-property name="lastname" type="java.lang.String">
??????????????? <column name="LASTNAME" length="16" />
??????????? </key-property>
?</composite-id>
使用联合主键的持久化类需要实现serializable接口和覆盖equals()、
?hashCode()方法。

热点排行