一般我们在数据库中建表,ID都会作为主键,主键作为一个每次新建数据自增加1的字段,大部分情况下作为唯一标识。
那么如何配置使得主键可以实现自增功能?
首先新建一个数据库表
-- Create table
create table TBL_SCHEDULE_TEMPLATE
(
ID VARCHAR2(100) not null,
NAME VARCHAR2(4000) not null,
PROJECT VARCHAR2(100) not null,
) //我这个就偷懒全设成varchar2了, 顺便也请问一下大家 这样做会不会不好?
之后对应这张表,逆生成java实体和hibernate配置文件,这个问题可以参考
http://862123204-qq-com.iteye.com/blog/1555379 这个里面有详细的如何使用Eclipse逆生成实体和配置文件。
假设已经有个java实体和hibernate的配置文件
现在需要在数据库中建立一个序列 sequence
-- Create sequence
create sequence SEQ_TEMPLATE
minvalue 1
maxvalue 999999999999999999999999999
start with 1
increment by 1
cache 20;
现在只需要做一步,修改hibernate配置文件,将你希望实现自增的字段,配置成如下样子:
<id name="id" type="string">
<column name="ID" precision="16" scale="0" />
<generator class="sequence">
<param name="sequence">SEQ_TEMPLATE</param>
</generator>
</id>
这里补充一下
1.配置好自增之后,如果你再在dao层中设置主键的值,例如
XXXX.setID("1")
那么这行代码其实是无效的,系统将自动使用序列值覆盖掉你写的值。
2.如果dao层对数据库进行操作,但是程序报错的话,那么你的序列值是已经被使用过的
例如你前面对数据库插入5条数据,但是由于某些错误,没有完成,那么1-5 的序列号是已经被使用过的,当你再成功插入值后,这个ID将会是6
3.对第二条补充一下,如果你的dao层没有任何错误,但是后续程序出错,那么你这个时候查看数据库,会发现数据好像并没有被插入。 但是当你完成了下一次成功的操作后,前面的值也会全部被插入。
分享到:
相关推荐
这种策略主要用于早期的数据库主键生成机制,现在已经较少使用。 sequence sequence是一种调用底层数据库的序列来生成主键的策略。这种策略需要设定序列名,不然hibernate无法找到。这种策略适用于需要高性能的...
本文将重点介绍在Oracle数据库环境下,使用Hibernate的“native”策略来生成主键的具体方法及注意事项。 #### 二、主键生成策略概述 在Hibernate中,主键生成策略主要包括以下几种: - **identity**:由数据库...
本文将深入探讨如何在Hibernate中实现Oracle数据库的自动增长特性,这一功能对于确保数据表中的主键唯一性至关重要。 ### Oracle数据库的自动增长机制 Oracle数据库提供了强大的序列(sequence)功能来支持自动增长...
Hibernate还提供了其他主键生成策略,如`increment`(适用于单线程环境),`identity`(数据库自增,如MySQL),`table`(通过独立的主键生成表)等,开发者应根据具体需求选择合适的策略。 6. **跨数据库兼容性**...
但需要注意的是,Oracle数据库不支持自增字段,因此在这种情况下应选择其他策略,如`sequence`。此策略在SQLServer和MySQL中非常流行。 #### 6. hilo `hilo`策略使用高/低位算法(High-Low algorithm)生成主键。...
- **缺点**:不适用于所有数据库(如 Oracle 不支持自增字段)。 - **应用场景**:MySQL 和 SQL Server 等支持自增字段的数据库。 6. **hilo** - **描述**:使用 hilo 算法生成主键,该算法需要在数据库中维护一...
increment策略由Hibernate在内存中自增生成主键,不依赖于数据库。它通过查询当前表的最大ID值,然后在内存中递增生成新的主键。由于这个过程不是线程安全的,因此在多JVM环境下可能会导致主键冲突。仅适用于单个...
Hibernate不参与主键的生成,这意味着主键生成完全由应用控制,可以与数据库无关。这种方式虽然灵活,但可能导致主键冲突,因此不推荐使用。 2. **increment**: increment策略由Hibernate在内存中生成主键,每次...
在数据库应用中,序列是一种常用的数据对象,它能够自动产生唯一的数值,常用于实现表中的主键自增功能。Oracle数据库提供了强大的序列管理功能,可以方便地创建、管理和使用序列。本文将详细介绍如何在Oracle数据库...
- **应用场景**:在 Oracle 数据库中常见,因为 Oracle 不支持自增字段,而 Sequence 是一种高效的解决方案。 #### 5. Identity - **描述**:利用 SQL Server 和 MySQL 的 AUTO_INCREMENT 特性自动为字段分配下一...
- `GenerationType.SEQUENCE`:使用数据库中的序列来生成主键,适用于支持序列的数据库如Oracle。 6. **@SequenceGenerator**:用于定义序列生成器,通常与`@GeneratedValue(strategy = GenerationType.SEQUENCE)`...
- **定义**:Hibernate会根据当前使用的数据库类型自动选择最适合的主键生成策略(如identity、hilo、sequence)。 - **应用场景**:适用于跨数据库平台的应用开发,可以避免因为数据库不同而导致的代码修改。 8....
配置Hibernate的`hibernate.connection.url`、`hibernate.connection.username`、`hibernate.connection.password`等属性,可以连接到Oracle数据库。此外,需确保驱动兼容,如使用`ojdbc.jar`驱动库。 登录和注册...
描述:本文深入解析了Hibernate映射文件配置的核心概念,重点阐述了映射文件的基本结构及其组成部分,包括主键(id)、普通属性(property)等关键元素的配置方法和策略。 ### Hibernate映射文件配置详解 在...
对于不支持序列的数据库,如MySQL,主键自增通常由数据库内置机制自动处理。在MySQL中,可以使用`SHOW CREATE TABLE`命令查看表结构,包括自增主键的配置。而Hibernate提供了跨数据库的主键生成策略,例如`native`...
数据库自身处理主键的自增,适用于long、short或int类型。不适用于所有数据库系统,只在特定数据库中可用。 3. **seqhilo**:针对Oracle、DB2等支持Sequence的数据库,用于long、short或int类型。Sequence是数据库...