继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

关于Hibernate的oracle主键id生成策略uuid、native和sequence

幕布斯6054654
关注TA
已关注
手记 1135
粉丝 218
获赞 1009
    1.uuid是产生一个32位的字符串,所以在数据库主键字段的大小上必须要大于等于32位。另外如果之前在库表设置了触发器和sequence,那么即使是采用uuid主键生成策略,那么hibernate在做插入时,uuid将会失效,而是采用sequence中的值作为主键id。相当于先用uuid做主键id,但是在插入之前又被sequence中的值覆盖掉了。这点必须注意。删除掉该表的触发器即可恢复。


2.native 意味着主键生成机制的实现方式将交给hibernate决定。hibernate 将根据底层数据库适配器dialect 的定义,采用不同数据库特定的主键生成方式。(对于SQLServer和MySQL自动采用自增字段,对于oracle自动采用Sequence生成主键)

注意:在这种情形下,hibernate会默认使用名为hibernate_sequence的序列,如果oracle中没有设置,Console控制台将会产生“Hibernate: select hibernate_sequence.nextval from dual Caused by: java.sql.SQLException: ORA-02289: 序列(号)不存在”的错误。那么应当在oracle中添加名为hibernate_sequence的序列。

或者采用如下方法来指明具体使用哪个序列:<generator class="native">
        <param name="sequence">HUSER_SEQ</param>
    </generator>3.sequence 意味着将采用数据库提供的sequence机制产生主键。在hbm.xml映射文件中,如果采用这种主键映射机制,那么必须明确指定用哪个序列来产生主键。如:<id name="userId" type="java.lang.Long">   

        <column name="USER_ID" precision="22" scale="0" />   
        <generator class="sequence">   
            <param name="sequence">SEQ_USER</param>

         </generator>    </id>  



作者:老鼠吱吱吱
链接:https://www.jianshu.com/p/e37277d47f5c


打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP