一直用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的配置文件了嘛。

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

Hibernate遇到oracle之主键生成策略的更多相关文章

  1. Hibernate之:各种主键生成策略与配置详解

    1.assigned 主键由外部程序负责生成,在 save() 之前必须指定一个.Hibernate不负责维护主键生成.与Hibernate和底层数据库都无关,可以跨数据库.在存储对象前,必须要使用主 ...

  2. Hibernate(4)——主键生成策略、CRUD 基础API区别的总结 和 注解的使用

    俗话说,自己写的代码,6个月后也是别人的代码……复习!复习!复习!涉及的知识点总结如下: hibernate的主键生成策略 UUID 配置的补充:hbm2ddl.auto属性用法 注解还是配置文件 h ...

  3. Hibernate的几种主键生成策略

    主键类型: 业务主键(natural key):业务主键的值是来源于一个业务数据. 代理主键(surrogate key):代理主键需要采用一种方式来生成某个唯一值. 代理主键的生成策略: 1.hib ...

  4. hibernate(二)主键生成策略

    hibernate主键生成策略主要指的是在实体类orm的配置 <id name=""> <generator class="native"&g ...

  5. Hibernate框架笔记02_主键生成策略_一级缓存_事务管理

    目录 0. 结构图 1. 持久化类的编写规则 1.1 持久化和持久化类 1.2 持久化类的编写规则 2. 主键生成策略 2.1 主键的分类 2.2 主键生成策略 3. 持久化类的三种状态[了解] 3. ...

  6. java框架之Hibernate(2)-持久化类&主键生成策略&缓存&事务&查询

    持久化类 概述 持久化:将内存中的对象持久化到数据库中的过程就是持久化.Hibernate 就是用来进行持久化的框架. 持久化类:一个 Java 对象与数据库的表建立了映射关系,那么这个类在 Hibe ...

  7. (转) Hibernate持久化类与主键生成策略

    http://blog.csdn.net/yerenyuan_pku/article/details/65462930 Hibernate持久化类 什么是持久化类呢?在Hibernate中持久化类的英 ...

  8. hibernate框架学习之主键生成策略generator

    1)手工控制 assigned(不限制类型) 2)数据库自动生成 uuid(字符串类型) increment(整型数值类型) identity (整型数值类型) sequence (整型数值类型) n ...

  9. 大家一起撸代码之——Hibernate各种主键生成策略与配置详解

    1.assigned 主键由外部程序负责生成,在 save() 之前必须指定一个.Hibernate不负责维护主键生成.与Hibernate和底层数据库都无关,可以跨数据库.在存储对象前,必须要使用主 ...

随机推荐

  1. .NET Mvc Razor

    .NET Mvc Razor也可以这样玩! 忙碌的工作总是占据了生活的大部分的时间!所以我的博客到现在还是寥寥的几篇文章,技术是用来分享和学习的,对技术有不同的见解,大家都可以分享下,如果如下文章有问 ...

  2. T_SQL查询语句(一): 单表查询

    ############################################ 查询语句--SELECT ########################################## ...

  3. javascript ajax 脚本跨域调用全解析

    javascript ajax 脚本跨域调用全解析 今天终于有点时间研究了一下javsscript ajax 脚本跨域调用的问题,先在网上随便搜了一下找到一些解决的办法,但是都比较复杂.由是转到jqu ...

  4. 图的匹配问题与最大流问题(三)——最大流问题Ford-Fulkerson方法Java实现

    上篇文章主要介绍了Ford-Fulkerson方法的理论基础,本篇给出一种Java的实现. 先借助伪代码熟悉下流程 FORD-FULKERSON(G,t,s) 1 for each edge(u,v) ...

  5. KL25的AD采集操作

    飞思卡尔的KL25单片机AD做的是很不错的,SAR型能做到16位.不过数据手册就写得不怎么样了,简直可以说是坑爹,很难看懂.有的描述让人难以理解,你指望在别的地方对不理解的地方会有其他角度的描述,结果 ...

  6. Ubuntu下OpenVPN客户端配置教程

    一般来说,提供Web服务的Linux服务器是很少需要连接OpenVPN的,但是个人Linux计算机在很多时候就需要连接OpenVPN了.比如以Linux为开发环境,需要连接公司的OpenVPN等等. ...

  7. JVM方法调用栈

    摘自深入分析java web技术内幕

  8. MJRefresh框架使用及说明

    一. MJRefresh的类解释. 1.MJRefreshComponent              所有刷新控件的基类别.(component: 成分,组件) 2.MJRefreshNormalH ...

  9. 【使用教程】论Windows下必备的抓包工具Fiddler2如何安装证书(查看Https)

    一.写在前面 好久没更新博客了,最近也是忙着年前的一些事情,所以一直没来得及弄一些有价值的东西,还是来冒个泡.随着苹果公司要求的2017年开始上架审核必须是Https,而原本Http的上架需要提交强烈 ...

  10. Mybatis学习笔记(四) 之动态SQL语句

    动态SQL mybatis 的动态sql语句是基于OGNL表达式的.可以方便的在 sql 语句中实现某些逻辑. 总体说来mybatis 动态SQL 语句主要有以下几类: 1. if 语句 (简单的条件 ...