- 浏览: 275890 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (220)
- oracle (45)
- extjs (2)
- jstl (8)
- tomcat (9)
- svn (2)
- 系统 (12)
- 工作日志 (4)
- flex (5)
- 乱码 (1)
- jsp (2)
- java (26)
- mysql (8)
- vmware (2)
- 其他 (4)
- acegi (1)
- yui (1)
- hibernate (1)
- javascript (10)
- Maven (2)
- 数据库 (3)
- html css (2)
- displaytag (6)
- 软件开发管理 (2)
- java模式 (2)
- springside (7)
- android (14)
- other (3)
- linux (1)
最新评论
-
yixiandave:
string2020 写道分布式应用 用户认证,应该是在统一的 ...
分布式应用注意简介 -
string2020:
分布式应用 用户认证,应该是在统一的一个地方验证吧
分布式应用注意简介 -
liusu:
1、listView 视图黑色 设置 cacheColorHi ...
android 注意 -
teamilk:
engine 是什么?怎么导呢,不会弄,请教下
H2 数据库数据导出 -
djb_daydayup:
哦,我看到源文件了!
How to use
Ver.2.00 ...
android screen monitor 手机屏幕共享
@SequenceGenerator(name="COMMONSEQ",sequenceName="COMMON_SEQ")
@GeneratedValue(strategy = GenerationType.SEQUENCE,generator="COMMONSEQ")
基本配置
@Id
@GeneratedValue(strategy=GenerationType.SEQUENCE)
public Integer getId() {
return this.id;
}
这样hibernate自动生成一个名叫hibernate_sequence的sequence
SQL> select * from USER_SEQUENCES;
hibernate使用sequence的后台动作:
下面是一个save()动作,hibernate 先发出一个 select hibernate_sequence.nextval from dual;
Hibernate:
select
hibernate_sequence.nextval
from
dual
Hibernate:
insert
into
DvdType
(name, id)
values
(?, ?)
1:typeoracle5
用自动创建的hibernate_sequence的缺陷: 会使得多个表共用一个sequnce,造成同一个表序号不连续
TYPE表:
1:TypeExample21
2:TypeExample21
3:TypeExample21
4:TypeExample22
5:TypeExample23
6:TypeExample24
7:TypeExample25
8:TypeExample26
9:TypeExample27
10:TypeExample28
11:TypeExample29
12:TypeExample210
QUALITY表
13:Qualityoracle5
14:QualityExample21
15:QualityExample22
16:QualityExample23
17:QualityExample24
18:QualityExample25
19:QualityExample26
20:QualityExample27
21:QualityExample28
22:QualityExample29
23:QualityExample210
所以建议,还是为每个表定义具体的sequence name
自定义sequence
@Entity
@SequenceGenerator(name="TypeSEQ",sequenceName="TypeSEQ_DB")
public class DvdType implements java.io.Serializable {
@Id
//@GeneratedValue
@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="TypeSEQ")
@Entity
@SequenceGenerator(name="QualitySEQ",sequenceName="QualitySEQ_DB")
public class QualityType implements java.io.Serializable {
@Id
//@GeneratedValue
@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="QualitySEQ")
00:07:46,437 INFO [STDOUT] Hibernate:
select
TypeSEQ_DB.nextval
from
dual
00:08:52,437 INFO [STDOUT] Hibernate:
select
QualitySEQ_DB.nextval
from
dual
hibernate的sequence ,生成的id,事务间缺省是50 increment
现象:
hibernate自动生成的sequence,在oracle下看,increment_by还是1
SQL> select * from USER_SEQUENCES;
SEQUENCE_NAME MIN_VALUE MAX_VALUE INCREMENT_BY C O CACHE_SIZE LAST_NUMBER
------------------------------ ---------- ---------- ------------ - - ---------- -----------
SEQUENCE_DVD_TABLE_1 1 1.0000E+27 1 N N 0 1511
USERSEQ_DB 1 1.0000E+27 1 N N 20 1
GROUPSEQ_DB 1 1.0000E+27 1 N N 20 21
但通过hibernate/JPA进行save/persist()操作,ID却是increment +50
SQL> insert into USERGROUP(ID,NAME) values(GROUPSEQ_DB.nextval,'group6');
1 row created.
SQL> select * from usergroup;
ID NAME
---------- --------------------------------------------------
200 group1
250 group1
300 group3
350 group4
400 group5
9 group6 //这是手工insert的,上面5条记录是hibernate persist的
6 rows selected.
SQL> select GROUPSEQ_DB.nextval from dual;
NEXTVAL
----------
10
原因:
1.hibernate 对sequence参数以自己为准,不读oracle的参数
2.hibernate increment缺省就是50,大概跟 hibernate集群应用有关
解决:hibernate提供了allocationSize参数来设
@Entity
@SequenceGenerator(name="GroupSEQ",sequenceName="GroupSEQ_DB",allocationSize=1)
public class UserGroup {
SQL> select * from usergroup;
ID NAME
---------- --------------------------------------------------
200 group1
250 group1
300 group3
350 group4
400 group5
11 group8 这两条是用hibernate新存的
12 group9
9 group6
发表评论
-
spring boot 开发期间不需要重启
2017-06-22 18:12 4731:pom.xml中增加 <dependency> ... -
最简单的springboot整合mybatis
2017-06-20 10:56 3961、建一个基本的springboot工程; 2、在pom. ... -
jconsole
2016-08-28 14:04 4081、设置tomcat start.sh JAVA_OPTS=& ... -
java base
2013-02-27 09:58 6421、参数定义: 有未知东西参与运算时,定义参数; 2、whil ... -
ssh springside 混淆
2011-07-21 15:02 1160proguard 工具 。 配置文件: -in ... -
android 安装笔记
2010-09-18 07:20 6661 、安装android eclipse 插件。地址 http ... -
junit 4 中的Before After Ignore Test BeforeClass AfterClass
2010-09-10 10:29 6975JUnit 4 使用 Java 5 中的注解(annotati ... -
dom4j中文乱码问题
2010-09-10 09:22 947引用:http://liaochangfa.iteye.com ... -
反射私有方法 收藏
2010-05-25 20:16 8991.私有构造函数的调用: ... -
JAVA System.getProperty()参数大全 收藏
2010-05-24 15:35 720java.version Java Ru ... -
eclips 备忘
2010-05-10 11:53 7491、eclipse 下运行tomcat 的配置在.settin ... -
为什么重写对象的equals后最好重写这个对象的hashcode方法
2010-03-11 10:19 719判断两个对象是否相等一般都会用对象的equals方法,而很少用 ... -
java 继承throws exception 注意事项
2010-03-08 11:31 1672子类重写父类方法后。子类的这个重写方法可以不抛出异常或抛出和父 ... -
String 等号比较 和 equals
2010-03-03 11:26 19111、"aa".equals("a ... -
java四个关键字:transient, strictfp, volatile, final
2010-02-22 08:57 876http://hi.baidu.com/dabo12/blog ... -
jdk5新特性
2010-02-03 16:52 708import static com.类名.*;//导入静态方法 ... -
图片压缩
2009-12-22 15:26 1344package zhc.tool.util; import ... -
java 读取图片信息
2009-12-22 11:02 1987exif 介绍 http://baike.baidu.com/ ... -
Spring Quartz定时详情
2009-12-01 13:37 642在Spring中,使用 ... -
Spring framework实现定时器之Quartz
2009-11-30 16:54 853Quartz 在开源任务调度框架中的翘首,它提供了强大任务调度 ...
相关推荐
2. **sequence**:这是针对 Oracle 数据库的,它使用序列(sequence)来生成 ID。你需要指定序列的名称。 ```xml <id name="id" column="id"> <generator class="sequence"> <param name="sequence">序列名 </...
为了在Hibernate中利用Oracle的序列(sequence)特性,需要在Hibernate的映射文件中进行相应的配置。以下是一个示例,展示了如何为`Department`实体类配置序列生成器(sequence generator): ```xml <hibernate-...
在Oracle数据库环境下,当需要为表创建自动增长的主键时,通常会使用Oracle的sequence机制。本文将详细介绍如何在Hibernate中使用Oracle sequence,以及在使用过程中应注意的一些事项。 首先,我们来看如何为不同的...
Hibernate通过`org.hibernate.id.SequenceGenerator`类来实现序列主键生成器。在`nextValue()`方法中,它会与数据库进行交互,获取序列的下一个值。这个过程涉及到JDBC操作,包括SQL的执行和结果的处理。 3. **...
### Hibernate 连接 Oracle 数据库的关键知识点 #### 1. Hibernate 概述 - **ORM概念**:对象关系映射(Object/Relational Mapping,简称ORM)是一种编程技术,用于将对象模型与关系型数据库之间的数据进行转换。...
【hibernate 连接 oracle 数据库】 一、Hibernate 概述 Hibernate 是一个流行的 Java 对象关系映射(ORM)框架,它提供了一种在 Java 应用程序中管理和操作关系数据库的方法。ORM 技术的核心思想是将面向对象的模型...
在Hibernate中,`Generator`是负责生成主键值的策略,通常在`<id>`元素中通过`class`属性指定。不同的数据库和不同的应用场景可能需要不同的生成策略。接下来,我们将逐一介绍各种常见的生成策略及其适用场景。 ###...
* sequence(序列):在 DB2, PostgreSQL, Oracle, SAP DB, McKoi 中使用序列(sequence),而在 Interbase 中使用生成器(generator)。返回的标识符是 long, short 或者 int 类型的。 * assigned(自行分配):...
Hibernate中通过`@GeneratedValue(strategy = GenerationType.SEQUENCE)`和`@SequenceGenerator`进行配置。 5. ** Table **:通过一个专门的表来生成ID,适用于跨数据库平台的系统,因为它不依赖特定数据库的特性。...
虽然`<param name="sequence">CREDIT_RECORD_id</param>`在这个上下文中并不生效,但其含义是在使用特定于Oracle的sequence策略时指定序列名。实际上,在使用“native”策略时,Hibernate会根据当前数据库环境自动...
4. **Sequence方式**:`<generator class="sequence">` 这种方式主要用于支持序列的数据库,如Oracle。开发者可以定义一个序列名称,Hibernate会通过这个序列来生成主键。这种方式确保了主键的顺序性和唯一性,但不...
在Hibernate的映射文件中,可以配置`<generator class="sequence">`,并指定序列名。例如: ```xml <id name="id" column="ID"> <generator class="sequence"> <param name="sequence">MY_SEQ </generator> </...
第1课 课程内容 6 第2课 Hibernate UML图 6...4、为Oracle指定定义的Sequence 22 5、TABLE - 使用表保存id值 23 三、 联合主键 24 1、xml方式 24 2、annotation方式 27 第14课 Hibernate核心开发接口(重点) 29 ........
在Hibernate中,可以使用`<generator class="sequence">`来指定使用Sequence作为主键生成策略,并通过`<param name="sequence">SEQ_CHILD</param>`来指定具体的序列名称。这种方式适用于需要生成大量连续主键值的...
- `native`:对于 Oracle 采用 Sequence 方式,对于 MySQL 和 SQL Server 采用 IDENTITY 方式。由数据库自动完成主键生成。 - `uuid`:采用 128 位的 UUID 算法生成主键,编码为 32 位 16 进制数字的字符串。 - `...
- 当插入新记录时,如果`id`字段为空,则触发器会为其分配下一个序列值。 **7. 表空间的IMP, EXP** - IMP和EXP是Oracle数据库的逻辑备份工具,用于将整个数据库或部分对象从一个Oracle环境复制到另一个环境中。 ...
- **Oracle**: `org.hibernate.dialect.Oracle9Dialect` - **SQL Server**: `net.sf.hibernate.dialect.SQLServerDialect` - **connection.driver_class**: 数据库驱动类名,用于连接特定的数据库。 - **MySQL**...