设为首页 收藏本站
查看: 1047|回复: 0

[经验分享] Hibernate的generator属性之意义

[复制链接]

尚未签到

发表于 2016-11-22 09:33:00 | 显示全部楼层 |阅读模式
    本文讲述Hibernate的generator属性的意义。Generator属性有7种class,本文简略描述了这7种class的意义和用法。

      Hibernate的Generator属性有7种class,本文简略描述了这7种class的意义和用法。
      1、identity:用于MySql数据库。特点:递增

    • < id name="id" column="id">   
    •     < generator class="identity"/>   
    • < /id>

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

    • < id name="id" column="id">   
    •    < generator class="sequence">   
    •      < param name="sequence">序列名< /param>   
    •    < /generator>   
    • < /id>

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

    • < id name="id" column="id">   
    •    < generator class="native"/>   
    • < /id>   

      注:使用native时Hibernate默认会去查找Oracle中的hibernate_sequence序列。
    如果Oracle中没有该序列,连Oracle数据库时会报错。
      4、hilo:通过高低位合成id,先建表hi_value,再建列next_value。必须要有初始值。

    • < id name="id" column="id">   
    •     < generator class="hilo">   
    •       < param name="table">high_val< /param>   
    •        < param name="column">nextval< /param>   
    •       < param name="max_lo">5< /param>   
    •     < /generator>   
    • < /id>  

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

    • < id name="id" column="id">   
    • < generator class="hilo">   
    • < param name="sequence">high_val_seq< /param>   
    • < param name="max_lo">5< /param>   
    • < /generator>   
    • < /id>

      6、assigned:用户自定义id;

    • < id name="id" column="id">   
    • < generator class="assigned"/>   
    • < /id>

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

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

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

      • <  class name="onlyfun.caterpillar.User" table="USER">
      •            <  id name="id" type="string" unsaved-value="null">
      •                <  column name="USER_ID"/>
      •                <  generator class="uuid.hex"/>
      •            <  /id>  



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-303828-1-1.html 上篇帖子: 【转】基于GeoServer的电子地图系统说明(五):基于GeoServer的WebGIS的实现 下篇帖子: greenplum数据库引擎探究
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表