oracle,mysql等数据库的ID生成方式
来源:互联网 发布:优化特色课程 编辑:程序博客网 时间:2024/06/06 04:42
转自:http://hi.baidu.com/ydfvidlhhonuvyr/item/9dbdbce654053a13585dd882
根据hibernate的文档,有两种方式实现实体对象的主键自动增长。
第一种:设置ID的增长策略是sequence,同时指定sequence的名字,最好每个表建一个sequence,此种做法就如同MS-SQL,MY-SQL中的自动增长一样,不需要创建触发器
<?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping package="com.liyanframework.demo.domain"> <class name="Department" table="DEPARTMENT"> <id name="id" column="ID"> <generator class="sequence"> <param name="sequence">DEPARTMENT_ID_SEQ</param> </generator> </id> <property name="name" column="NAME" type="string" /> <property name="description" column="DESCRIPTION" type="text" /> </class> </hibernate-mapping>
第二种:设置ID的增长策略是native,但是需要创建一个名字为hibernate_sequence(这个名字好像是hibernate默认的 sequence名字,不创建会出错的)的全局使用的sequence,然后再对每一个表的ID生成的时候,使用触发器,取得 hibernate_sequence.CURRVAL作为新记录的ID,
<?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping package="com.liyanframework.demo.domain"> <class name="Department" table="DEPARTMENT"> <id name="id" column="ID"> <generator class="native"> </generator> </id> <property name="name" column="NAME" type="string" /> <property name="description" column="DESCRIPTION" type="text" /> </class> </hibernate-mapping>
比 较两种做法,第二种做法也就是hibernate在代码中,实现了oracle中的触发器功能。对于不同的情况,选择不懂的做法。如果新的系统,新建的 oracle数据库,推荐使用第一种做法,简单,容易移植到其他支持自动增长的数据库;如果是老的系统,需要把其他数据库转换为oracle的,那就要用 第二种了,使用native的方式,可以不改动配置文件,兼容oracle和mysql之类带有自动增长的数据库。
increment:生成long, short或者int类型的主键,不能在cluster环境下使用。适用于所有数据库
identity:生成long, short或者int类型的主键。适用于DB2, MySQL, MS SQL Server, Sybase and HypersonicSQL
sequence :生成long, short或者int类型的主键。适用于DB2, PostgreSQL, Oracle, SAP DB, McKoi,Interbase.
hilo:生成long, short或者int类型的主键。需要提供一个数据库的表来存放生成的主键信息。当采用应用服务器的JTA提供的数据库连接或者用户自定义的数据库连接的时候,不要使用这种主键生成方式。适用于所有数据库
seqhilo:采用给定的数据库的sequence来生成long, short或者int类型的主键。适用于DB2, PostgreSQL, Oracle, SAP DB, McKoi,Interbase.
uuid.hex:采用128位的算法来生成一个32位字符串。最通用的一种方式。适用于所有数据库
uuid.string:同样采用128位的UUID算法。将生成的字符编码位16位。适用于除PostgreSQL.以外的数据库
native:根据具体连接的数据库从identity, sequence或者hilo选择一种来生成主键。适用的数据库根据选择的生成方式确定。
assigned: 交给应用自己给主键赋值。要注意的是赋值必须在调用save()方法之前完成。适用的数据库根据选择的生成方式确定。
欢迎访问:http://blog.csdn.net/wwwzys
- oracle,mysql等数据库的ID生成方式
- mysql数据库分表后生成全局id的几种方式
- java连接oracle,db2,MySQL,sqlserver等数据库的方式
- Oracle数据库,唯一标识ID的生成
- 这是一个问题,mysql数据库的id生成方式GeneratedValue不设值报错,求大神解答
- oracle,mysql,odbc等数据库驱动及连接方式
- ORACLE数据库的统计数据及其生成方式
- ORACLE数据库的统计数据及其生成方式
- ORACLE数据库的统计数据及其生成方式
- ORACLE 数据库的统计数据及其生成方式
- oracle数据库的主键生成方式
- 连接mysql,oracle,sqlServer数据库的方式
- 数据库分表后,并发环境下,生成全局id生成的几种方式
- 数据库分表后,并发环境下,生成全局id生成的几种方式
- Oracle,MySql,SqlServer等数据库的自增和分页
- Java连接sqlserver,Mysql,oracle等数据库的方法
- 全局唯一ID的生成方式
- Android代码生成id的方式
- 重拾Spring之配置bean详解以及AppliactionContext基本功能
- 头文件中extern C的用法
- hdu 3349(水,几何)
- android:paddingLeft和android:layout_marginLeft区别
- <base target="_parent">标签用法
- oracle,mysql等数据库的ID生成方式
- LA 5916(GCD Guessing Game-质数分组)
- 程序员考试说明
- java反射详解
- 蓝牙(Bluetooth)---源码目录及设置应用源码分析
- 软件设计师考试说明
- insmod: error inserting 'sequans_usb.ko': -1 Unknown symbol in module
- kernel socket 实例
- SICP中parallel-execute