解决oracle中使用hibernate在某些条件下不能正确创建hibernate_sequence的问题

    项目中使用了ssh作为开发底层框架,由于在开发前期并没有限制项目运行在哪一个数据库之上,因此在hibernate的配置上使用Generated的id生成方式,使得能够在不修改源代码的情况下,无缝的在不同的数据库上跑,只需要修改配置文件中的dialect即可。
    在这种情况下,在oracle中,hibernate就会使用一个叫做hibernate_sequence的全局sequence来作为所有主键的生成sequence,在新增一条记录之上,均需要从此sequence中取一个数值,并作为其他记录的主键插入到数据库当中。

    然后,这个hibernate_sequence并不是在项目启动之前手动地创建的,而是使用了hiberante的create-update方式,即创建-修改的方式进行创建。既然是这样,那么hibernate在启动之前即需要去检测所要创建的sequence是否存在,如果存在,则不再创建此sequence。然而,在某些情况下,hibernate能够探测到其它用户所创建的sequence,而被认为不再需要创建sequence,这时候就会在项目运行中出错了。出错的原因,即找不到相应的sequence。
    这个错误和hibernate不会主动创建某些表一致,不一样的是hibernate用的是另一个判断语句来判断相应的sequence是否存在。
    相关链接:解决在oracle数据库中使用hibernate生成表不能正确创建表的问题.

继续阅读“解决oracle中使用hibernate在某些条件下不能正确创建hibernate_sequence的问题”