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

    <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联合主键();





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值