Hibernate的generator属性

<h1>
    <span class="link_title"><a href="/zzh87615/article/details/6091655">
    Hibernate的generator属性         
       
    </a>
    </span>

     
</h1>
    <div class="article_manage clearfix">
    <div class="article_l">
        <span class="link_categories">
        标签:
          <a href="http://www.csdn.net/tag/generator" target="_blank" onclick="_gaq.push(['_trackEvent','function', 'onclick', 'blog_articles_tag']);">generator</a><a href="http://www.csdn.net/tag/hibernate" target="_blank" onclick="_gaq.push(['_trackEvent','function', 'onclick', 'blog_articles_tag']);">hibernate</a><a href="http://www.csdn.net/tag/class" target="_blank" onclick="_gaq.push(['_trackEvent','function', 'onclick', 'blog_articles_tag']);">class</a><a href="http://www.csdn.net/tag/postgresql" target="_blank" onclick="_gaq.push(['_trackEvent','function', 'onclick', 'blog_articles_tag']);">postgresql</a><a href="http://www.csdn.net/tag/%e6%95%b0%e6%8d%ae%e5%ba%93" target="_blank" onclick="_gaq.push(['_trackEvent','function', 'onclick', 'blog_articles_tag']);">数据库</a><a href="http://www.csdn.net/tag/oracle" target="_blank" onclick="_gaq.push(['_trackEvent','function', 'onclick', 'blog_articles_tag']);">oracle</a>
        </span>
    </div>
    <div class="article_r">
        <span class="link_postdate">2010-12-22 14:20</span>
        <span class="link_view" title="阅读次数">22561人阅读</span>
        <span class="link_comments" title="评论次数"> <a href="#comments" onclick="_gaq.push(['_trackEvent','function', 'onclick', 'blog_articles_pinglun'])">评论</a>(1)</span>
        <span class="link_collect tracking-ad" data-mod="popu_171"> <a href="javascript:void(0);" onclick="javascript:collectArticle('Hibernate%e7%9a%84generator%e5%b1%9e%e6%80%a7+','6091655');return false;" title="收藏" target="_blank">收藏</a></span>
         <span class="link_report"> <a href="#report" onclick="javascript:report(6091655,2);return false;" title="举报">举报</a></span>

    </div>
</div>    <style type="text/css">        
        .embody{
            padding:10px 10px 10px;
            margin:0 -20px;
            border-bottom:solid 1px #ededed;                
        }
        .embody_b{
            margin:0 ;
            padding:10px 0;
        }
        .embody .embody_t,.embody .embody_c{
            display: inline-block;
            margin-right:10px;
        }
        .embody_t{
            font-size: 12px;
            color:#999;
        }
        .embody_c{
            font-size: 12px;
        }
        .embody_c img,.embody_c em{
            display: inline-block;
            vertical-align: middle;               
        }
         .embody_c img{               
            30px;
            height:30px;
        }
        .embody_c em{
            margin: 0 20px 0 10px;
            color:#333;
            font-style: normal;
        }
</style>
<script type="text/javascript">
    $(function () {
        try
        {
            var lib = eval("("+$("#lib").attr("value")+")");
            var html = "";
            if (lib.err == 0) {
                $.each(lib.data, function (i) {
                    var obj = lib.data[i];
                    //html += '<img src="' + obj.logo + '"/>' + obj.name + "&nbsp;&nbsp;";
                    html += ' <a href="' + obj.url + '" target="_blank">';
                    html += ' <img src="' + obj.logo + '">';
                    html += ' <em><b>' + obj.name + '</b></em>';
                    html += ' </a>';
                });
                if (html != "") {
                    setTimeout(function () {
                        $("#lib").html(html);                      
                        $("#embody").show();
                    }, 100);
                }
            }      
        } catch (err)
        { }
        
    });
</script>
  <div class="category clearfix">
    <div class="category_l">
       <img src="http://static.blog.csdn.net/images/category_icon.jpg">
        <span>分类:</span>
    </div>
    <div class="category_r">
                <label onclick="GetCategoryArticles('738195','zzh87615','top','6091655');">
                    <span onclick="_gaq.push(['_trackEvent','function', 'onclick', 'blog_articles_fenlei']);">Java<em>(31)</em></span>
                  <img class="arrow-down" src="http://static.blog.csdn.net/images/arrow_triangle _down.jpg" style="display:inline;">
                  <img class="arrow-up" src="http://static.blog.csdn.net/images/arrow_triangle_up.jpg" style="display:none;">
                    <div class="subItem">
                        <div class="subItem_t"><a href="http://blog.csdn.net/zzh87615/article/category/738195" target="_blank">作者同类文章</a><i class="J_close">X</i></div>
                        <ul class="subItem_l" id="top_738195">                            
                        </ul>
                    </div>
                </label>                    
    </div>
</div>
    本文讲述Hibernate的generator属性的意义。Generator属性有7种class,本文简略描述了这7种class的意义和用法。
    1. <class name="onlyfun.caterpillar.User"  
    2. table="USER">   
    3. <id name="id" type="string" unsaved-value="null">   
    4. <column name="USER_ID"/>   
    5. <generator class="uuid.hex"/>  
    6. </id>   
    7. </class>   
       

    hibernate的Generator属性有7种class,本文简略描述了这7种class的意义和用法。

    1、identity:用于MySQL数据库。特点:递增

    1. <id name="id" column="id">  
    2. < generator class="identity"/>  
    3. </id>  

    注:对于mysql数据库使用递增序列时需要在建表时对主键指定为auto_increment属性。

    2、sequence:用于Oracle数据库

    1. <id name="id" column="id">  
    2. <generator class="sequence">  
    3. <param name="sequence">序列名</param>  
    4. </generator>  
    5. </id>   

    3、native:跨数据库时使用,由底层方言产生。
    Default.sequence为hibernate_sequence

    1. <id name="id" column="id">  
    2. <generator class="native"/>  
    3. </id>   

    注:使用native时Hibernate默认会去查找oracle中的hibernate_sequence序列。
    如果Oracle中没有该序列,连Oracle数据库时会报错。

    4、hilo:通过高低位合成id,先建表hi_value,再建列next_value。必须要有初始值。

    1. <id name="id" column="id">  
    2. <generator class="hilo">  
    3. <param name="table">high_val</param>  
    4. <param name="column">nextval</param>  
    5. <param name="max_lo">5</param>  
    6. </generator>  
    7. </id>    

    5、sequencehilo:同过高低位合成id,建一个sequence序列,不用建表。

    1. <id name="id" column="id">  
    2. <generator class="hilo">  
    3. <param name="sequence">high_val_seq</param>  
    4. <param name="max_lo">5</param>  
    5. </generator>  
    6. </id>   

    6、assigned:用户自定义id;

    1. <id name="id" column="id">   
    2. <generator class="assigned"/>  
    3. </id>   

    7、foreign:用于一对一关系共享主健时,两id值一样。

    本文讲解Hibernate中hbm的generator子元素的一些内置生成器的快捷名字。Generator子元素是一个非常简单的接口;某些应用程序可以选择提供他们自己特定的实现。

    在*.hbm.xml必须声明的< generator>子元素是一个Java类的名字,用来为该持久化类的实例生成唯一的标识。

    1. <generator class="sequence"/>  

    这是一个非常简单的接口;某些应用程序可以选择提供他们自己特定的实现。当然,Hibernate提供了很多内置的实现。下面是Generator子元素的一些内置生成器的快捷名字:

    increment(递增)

    用于为long, short或者int类型生成唯一标识。只有在没有其他进程往同一张表中插入数据时才能使用。 在集群下不要使用。

    identity

    对DB2,MySQL, MS SQL Server, Sybase和HypersonicSQL的内置标识字段提供支持。返回的标识符是long, short 或者int类型的。

    sequence (序列)

    在DB2,PostgreSQL, Oracle, SAP DB, McKoi中使用序列(sequence),而在Interbase中使用生成器(generator)。返回的标识符是long, short或者 int类型的。

    hilo (高低位)

    使用一个高/低位算法来高效的生成long, short或者 int类型的标识符。给定一个表和字段(默认分别是是hibernate_unique_key 和next_hi)作为高位值得来源。高/低位算法生成的标识符只在一个特定的数据库中是唯一的。在使用JTA获得的连接或者用户自行提供的连接中,不要使用这种生成器。

    seqhilo(使用序列的高低位)

    使用一个高/低位算法来高效的生成long, short或者 int类型的标识符,给定一个数据库序列(sequence)的名字。

    uuid.hex

    用一个128-bit的UUID算法生成字符串类型的标识符。在一个网络中唯一(使用了IP地址)。UUID被编码为一个32位16进制数字的字符串。

    uuid.string

    使用同样的UUID算法。UUID被编码为一个16个字符长的任意ASCII字符组成的字符串。不能使用在PostgreSQL数据库中

    native(本地)

    根据底层数据库的能力选择identity, sequence 或者hilo中的一个。

    assigned(程序设置)

    让应用程序在save()之前为对象分配一个标示符。

    foreign(外部引用)

    使用另外一个相关联的对象的标识符。和< one-to-one>联合一起使用。

    Generator子元素的用法:

    1. <class name="onlyfun.caterpillar.User" table="USER">  
    2. <id name="id" type="string" unsaved-value="null">  
    3. <column name="USER_ID"/>  
    4. <generator class="uuid.hex"/>  
    5. </id>  
    6. </class>  

    <div id="digg" articleid="6091655">
        <dl id="btnDigg" class="digg digg_enable" onclick="btndigga();">
           
             <dt>顶</dt>
            <dd>4</dd>
        </dl>
       
          
        <dl id="btnBury" class="digg digg_enable" onclick="btnburya();">
          
              <dt>踩</dt>
            <dd>0</dd>               
        </dl>
        
    </div>
 <div class="tracking-ad" data-mod="popu_222"><a href="javascript:void(0);" target="_blank">&nbsp;</a>   </div>
<div class="tracking-ad" data-mod="popu_223"> <a href="javascript:void(0);" target="_blank">&nbsp;</a></div>
<script type="text/javascript">
            function btndigga() {
                $(".tracking-ad[data-mod='popu_222'] a").click();
            }
            function btnburya() {
                $(".tracking-ad[data-mod='popu_223'] a").click();
            }
        </script>
原文地址:https://www.cnblogs.com/duende99/p/7101663.html