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的配置文件了嘛。
好了基本就这样吧,祝你好运。
Hibernate遇到oracle之主键生成策略的更多相关文章
- Hibernate之:各种主键生成策略与配置详解
1.assigned 主键由外部程序负责生成,在 save() 之前必须指定一个.Hibernate不负责维护主键生成.与Hibernate和底层数据库都无关,可以跨数据库.在存储对象前,必须要使用主 ...
- Hibernate(4)——主键生成策略、CRUD 基础API区别的总结 和 注解的使用
俗话说,自己写的代码,6个月后也是别人的代码……复习!复习!复习!涉及的知识点总结如下: hibernate的主键生成策略 UUID 配置的补充:hbm2ddl.auto属性用法 注解还是配置文件 h ...
- Hibernate的几种主键生成策略
主键类型: 业务主键(natural key):业务主键的值是来源于一个业务数据. 代理主键(surrogate key):代理主键需要采用一种方式来生成某个唯一值. 代理主键的生成策略: 1.hib ...
- hibernate(二)主键生成策略
hibernate主键生成策略主要指的是在实体类orm的配置 <id name=""> <generator class="native"&g ...
- Hibernate框架笔记02_主键生成策略_一级缓存_事务管理
目录 0. 结构图 1. 持久化类的编写规则 1.1 持久化和持久化类 1.2 持久化类的编写规则 2. 主键生成策略 2.1 主键的分类 2.2 主键生成策略 3. 持久化类的三种状态[了解] 3. ...
- java框架之Hibernate(2)-持久化类&主键生成策略&缓存&事务&查询
持久化类 概述 持久化:将内存中的对象持久化到数据库中的过程就是持久化.Hibernate 就是用来进行持久化的框架. 持久化类:一个 Java 对象与数据库的表建立了映射关系,那么这个类在 Hibe ...
- (转) Hibernate持久化类与主键生成策略
http://blog.csdn.net/yerenyuan_pku/article/details/65462930 Hibernate持久化类 什么是持久化类呢?在Hibernate中持久化类的英 ...
- hibernate框架学习之主键生成策略generator
1)手工控制 assigned(不限制类型) 2)数据库自动生成 uuid(字符串类型) increment(整型数值类型) identity (整型数值类型) sequence (整型数值类型) n ...
- 大家一起撸代码之——Hibernate各种主键生成策略与配置详解
1.assigned 主键由外部程序负责生成,在 save() 之前必须指定一个.Hibernate不负责维护主键生成.与Hibernate和底层数据库都无关,可以跨数据库.在存储对象前,必须要使用主 ...
随机推荐
- Java 快速开发平台 WB 6.8 发布
WebBuilder是一款开源的可视化Web应用开发和运行平台. 基于浏览器的集成开发环境,采用可视化的设计模式,支持控件的拖拽操作,能轻松完成前后台应用开发: 高效.稳定和可扩展的特点,适合复杂企业 ...
- Query插件
推荐一些常用感觉不错的jQuery插件 JQuery插件繁多,下面是个人在工作和学习中用到感觉不错的,特此记录. UI: jquery UI(官方的UI插件,很好很强大功能完备,灵活性很强,有十几套主 ...
- Ping其他电脑ping不通的解决方法
要想Ping通其他电脑,首先要看被PING的电脑,是否允许PING. 一.在被PING电脑操作系统为XP下分为:1.被PING 电脑关闭了防火墙,就完全可以PING通:2.被PING 电脑开了防火墙, ...
- HttpMessageHandler管道[上篇]
HttpMessageHandler管道[上篇] 整个ASP.NET Web API服务端框架采用管道式设计,这个用于“处理请求.响应回复”的管道本质上就是一组HttpMessageHandler的有 ...
- Python学习入门基础教程(learning Python)--6 Python下的list数据类型
1. List是数组么? 答案是: 不是!Python 里面有一个非常强大的数据类型list.他什么都能装下!list里面既可以支持 int类型,也可以支持str类型. >>> li ...
- hdu1198--并查集
Problem Description Benny has a spacious farm land to irrigate. The farm land is a rectangle, and is ...
- LINUX下编译安装最新版本mysql
通过参考其他文章 1.下载安装mysql-5.5.30.tar.gz与cmake.2.8.11.2.tar.gz (1)先安装cmake(mysql5.5以后是通过cmake来编译的) [root@ ...
- jquery ajax请求成功,数据返回成功,seccess不执行的问题
1.状态码返回200--表明服务器正常响应了客户端的请求: 2.通过firebug和IE的httpWatcher可以看出服务器端返回了正常的数据,并且是符合业务逻辑的数据. ...
- H5 拖放事件详解
拖放事件 H5的拖放事件提供了多个接口: 1.drag:当元素或者选中的文本被拖动时触发(每几百毫秒触发一次),应用在被拖拽元素上 2.dragend:当拖动操作结束时触发(通过释放鼠标按钮或者点击转 ...
- CHM木马
一. 弹出计算器 打开EasyCHM,工具 -> 反编译指定的CHM,选择目标文件和反编译工作目录. 进入反编译的工作目录,找到并编辑主页文件,这里是index.html 在<body&g ...