您的位置:首页 > 其它

Hibernate内置的持久化标识符生成器

2015-10-29 12:26 225 查看
<id

access="field"

name="id"

type=""

column=""

>

<generator class="native"/>

不能确定使用什么样的自增策略的时候可以选用native

<generator class="increment"/>

id字段并未被设置为自增类型,id字段的值是由hibernate自动生成的。主键的值是以1为增量递增的,即使读者在程序中将数据库表中的记录全部删除,在其后新增的记录的主键值仍然是以记录删除前的主键值为基数的,如果将表清空的话则主键值是从1开始的。因为hibernate在设置主键值的时候会先执行 select max(id) from Table。

<generator class="identity"/>

identity标示符生成器的实现机制是由底层数据库而不是由hibernate控制,所以在表清空之后并不会从1开始计数。

<generator class="sequence"/>

<generator class="hilo">

<param name="table">表名</param>

<param name="column">存放新标志符的字段名</param>

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

</generator>

算法第一条的id为0,每循环一圈,hi的值就增加1 ,即0*(100+1)+0;0*(100+1)+1;下一轮:1*(100+1)+0;1*(100+1)+1;

<generator class="assigned"/>

数据库表的主键不再按照某个增量自增,而变成了读者在应用程序中指定的值,必须在把记录插入数据库之前,给主键值赋值。

<generator class="foreign"/>

</id>

//复合主键

<composite-id class="" mapped="true">

<key-property name=""></key-property>

<key-property name=""></key-property>

<key-many-to-one name="factory" class="Factory" column="factory_id"></key-many-to-one>

子元素进行多对一的关联映射,从而建立了具有符合主键的实体和其他实体的多对一的关联。

映射文件类通过<key-many-to-one>建立了与类Factory之间的党项多对一的关联,相应的在类中应该有一个Factory类型的factory属性在表中也应该有一个factory_id的外键。

</composite-id>

使用复合主键的持久化类的时候,必须实现java.io.Serializable接口,另外还必须重载hashCode()方法和equals()方法来实现组合标示符的判断。

class的值表示复合主键被映射为一个新类,类中也包含被定义的联合主键的属性,mapped为true的时候表明在原有的类中仍然包含这两个属性的值,并且也包含映射的类。如果获取值的话,原类.get联合主键的映射类().get联合主键();
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: