Hibernate中id设置<generator class="uuid.hex" />

1、“assigned” 
  
主键由外部程序负责生成,在   save()   之前指定一个。   
    
  2、 “hilo” 
  
通过hi/lo   算法实现的主键生成机制,需要额外的数据库表或字段提供高位值来源。    
 <id name="id" type="int" column="id"> 
<generator class="hilo"> 
<param name="table">表名</param> 
<param name="column">字段名</param> 
<param name="max_lo">100</param> 
</generator> 
</id>   
  
3、“seqhilo” 
  
与hilo   类似,通过hi/lo   算法实现的主键生成机制,需要数据库中的   Sequence,适用于支持   Sequence   的数据库,如Oracle。    
    <id name="id" type="int" column="id"> 
<generator class="seqhilo"> 
<param name="sequence">hi_value</param> 
<param name="max_lo">100</param> 
</generator> 
</id>
  

hi: 高值--从数据库wasw100_hilo_tbl读取的next_value值

lo: 低值--hibe自动维护,从0到max_lo(看下面)

max_lo: 配置文件中<param name="max_lo">100</param>的值,这里是100

hibernate根据hilo生成器生成主键的过程:

1.读取并记录数据库的wasw100_hilo_tbl表中next_value字段的值,数据库中此字段值加1保存

2.hibernate取得lo值(0到max_lo-1循环,lo到max_lo时,执行步骤1,然后lo继续从0到max_lo循环)

取得hi值和lo值后,根据下面的公式计算主键值:

hi*(max_lo+1)+lo;

4、“increment” 

  
主键按数值顺序递增。此方式的实现机制为在当前应用实例中维持一个变量,以保存着当前的最大值,之后每次需要生成主键的时候将此值加1作为主键。这种方式可能产生的问题是:不能在集群下使用。   
 
<id name="id" type="java.lang.Integer">
            <column name="id" />
            <generator class="increment" />
        </id>   

5、 “identity” 
  
采用数据库提供的主键生成机制。如DB2、SQL   Server、MySQL   中的主键生成机制。  
  
    <id name="id" type="java.lang.Integer">
            <column name="id" />
            <generator class="identity" />
        </id>
注:对于MySql数据库使用递增序列时需要在建表时对主键指定为auto_increment属性。

6、“sequence” 
  
采用数据库提供的   sequence   机制生成主键。如   Oralce   中的Sequence。    
   <id name="id" type="long">
   <column name="ID" not-null="true" sql-type="NUMBER" unique="true"/>
   <generator class="sequence">
    <param name="sequence">序列名</param>    
   </generator>
  </id> 
7、 “native” 
  
由   Hibernate   根据使用的数据库自行判断采用   identity、hilo、sequence   其中一种作为主键生成方式。 
  <id name="id" type="java.lang.Integer">
            <column name="id" />
            <generator class="native" />
        </id>   
    
  
8、“uuid.hex” (最常用的生成方式)
  
由   Hibernate   基于128   位   UUID   算法   生成16   进制数值(编码后以长度32   的字符串表示)作为主键。 
 
<id name="id" type="java.lang.String">
            <column name="ID" />
            <generator class="uuid.hex" />
        </id> 
9、 “uuid.string” 
  
与uuid.hex   类似,只是生成的主键未进行编码(长度16),不能应用在   PostgreSQL   数据库中。 
    
  
10、“foreign” 
  
使用另外一个相关联的对象的标识符作为主键。 

本文讲解Hibernate中hbm的generator子元素的一些内置生成器的快捷名字。Generator子元素是一个非常简单的接口;某些应用程序可以选择提供他们自己特定的实现。IDCard与Student形成一对一关联,IDCard端的设置映射配置如下:

<class name="IDCard">

        <id name="id" column="Card_id">

           <generator class="foreign">

              <param name="property">student</param>

           </generator>

       </id>      

        <property name="IDNo" unique="true"/>

        <property name="nationality"/>

        <property name="address"/>

        <one-to-one name="student"  class="Student" constrained="true"/>  

</class>

解释:

(1)<generator class="foreign">

     指定id生成方式, (之前我们用的id生成方式是native,是让底层数据库自动生成id,目前我的应征环境下,native从1开始,递增生成id)。在这里,我们要用外键来生成主键,所以指定为foreign,也就是去共享关联对象的主键。

(2)<param name="property">student</param>

    指定主键来源,这里的student是关联名称。

(3)<one-to-one name="student"  class="Student" constrained="true"/>  

     指定与Student形成一对一关联,

(4)constrained=”true”

该选项最关键的是影响save和delete的先后顺序

没有设定时:总是先操作关联表,后操作本表;

设定以后:添加时先关联表,后本表;删除时先本表,再操作关联表。


  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE generatorConfiguration PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN" "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd"> <generatorConfiguration> <classPathEntry location="D:\Maven\apache-maven-3.6.0\mvn\repository\mysql\mysql-connector-java\5.1.6\mysql-connector-java-5.1.6.jar" /> <context id="msqlTables" targetRuntime="MyBatis3"> <plugin type="org.mybatis.generator.plugins.SerializablePlugin"></plugin> <jdbcConnection connectionURL="jdbc:mysql://localhost:3306/library?useUnicode=true&characterEncoding=utf-8" driverClass="com.mysql.jdbc.Driver" password="root" userId="root" > <property name="nullCatalogMeansCurrent" value="true"/> </jdbcConnection> <javaTypeResolver> <property name="forceBigDecimals" value="false" /> </javaTypeResolver> <!-- 生成实体类和数据库表一一对应 --> <javaModelGenerator targetPackage="com.yx.po" targetProject="D:\IDEAProject\libraryProject\src\main\java"> <property name="enableSubPackages" value="true"/> <!-- 从数据库返回的值被清理前后的空格 --> <property name="trimStrings" value="true" /> </javaModelGenerator> <!--映射xml文件及dao接口--> <sqlMapGenerator targetPackage="com.yx.dao" targetProject="D:\IDEAProject\libraryProject\src\main\resources"> <property name="enableSubPackages" value="true"/> </sqlMapGenerator> <javaClientGenerator type="XMLMAPPER" targetPackage="com.yx.dao" targetProject="D:\IDEAProject\libraryProject\src\main\java"> <property name="enableSubPackages" value="true"/> </javaClientGenerator>
07-23
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值