• Hibernate遇到oracle之主键生成策略


    一直用Hibernate+mysql,感觉Hibernate很好用,也出过什么大问题;这周,公司的产品要部署到Orecle,虽然产品号称支持Oracle但是我自己知道,这个产品压根儿就没在Oracle上测试过,更不要是使用了。于是就开始紧罗密布的测试了,问题自然一大堆,现在说一个关于主键生成策略的问题。

    首先,众所周知,Hibernate可以自动建表。当我们把项目部署好,运行的时候发现,确实自动建表了,但是少了很多表,就是有的表生成了,有的表木有生成,这就让人很头疼了。一波操作之后,发现Hibernate配置文件中,主键生产策略有误,下面就给大家总结一下当Hibernate遇到oracle之后,主键生成策略变化。


    首先在非集群情况下:
    可以使用hibernate自带的increment策略生成主键 ,但是increment 实现机制为在当前应用实例中维持一个变量,以保存着当前的最大值,之后每次需要生成主键的时候将此值加1作为主键。从根本来讲,主键是在Java虚拟机上产生而不是数据库产生的,所以increment不能在集群环境下使用

    因此在集群情况下:
    就必须使用sequence策略。如果采用sequence策略,就必须在oracle数据库里面创建序列:

    CREATE SEQUENCE emp_sequence  --序列名
    INCREMENT BY 1     -- 每次加几个  
    START WITH 1        -- 1开始计数  
    NOMAXVALUE          -- 不设置最大值  
    NOCYCLE               -- 一直累加,不循环  
    CACHE 10;

    当然有的朋友还比较喜欢native这个策略,万金油嘛;但是要注意了在数据库是Oracle的时候,如果不懂native的机制,那就麻烦了。怎么回事呢?如果使用native策略,那么hibernate会自动调用hibernate_sequence这个序列如果没有,那自然就出问题了。所以还是在oracle数据库要创建一个名为hibernate_sequence的序列。有人以为反正也要建立sequence为毛要用native啊?不过对于产品化的东西,可能用于多种数据库的东西还是有一定使用性的,就不用到每次部署的时候先去改hibernate的配置文件了嘛。

    好了基本就这样吧,祝你好运。

  • 相关阅读:
    LeetCode(Weekly Contest 187)题解
    2021 暑期实习招聘思之未雨绸缪
    LeetCode(Weekly Contest 185)题解
    构建私有的 docker registry
    LeetCode(Weekly Contest 182)题解
    Win10图标变白
    远程连接linux上的mysql
    IDEA复制粘贴html文件打不进war包问题
    Git命令
    数据源收集
  • 原文地址:https://www.cnblogs.com/Li-Wei/p/6285225.html
Copyright © 2020-2023  润新知