hibernate native oracle,hibernate native 主键生成策略

前一次做个系统用的oracle数据库,使用hibernate生成主键的策略是SEQUENCE,当时觉得很累,因为不知道怎么的,oracle+sequence+trigger怎么也取不到新增数据时的主键值。

这次就把重点放这里了,同时还有两个新的问题,

1。到底哪种hibernate生成主键的策略,性能优一点;

2。主键生成策略最好是能跨数据库的。

大家都说性能,oracle都是用的sequence,所以主键还是想用这个方式生成。

接着就是返回新增数据的主键

native

根据底层数据库的能力选择 identity、sequence 或者 hilo 中的一个;

也就是说,主键生成,由hibernate选择。

对于内部支持标识字段的数据库(DB2、MySQL、Sybase 和 MS SQL),你可以使用 identity 关

键字生成。对于内部支持序列的数据库(DB2、Oracle、PostgreSQL、Interbase、McKoi 和 SAP

DB),你可以使用 sequence 风格的关键字生成。这两种方式对于插入一个新的对象都需要两次

SQL 查询。

查询了一下更多的网上资料,不知道在哪里看到了,这种生成主键的策略,如果是mysql,他会选择auto_increment方式生成主键;如果是oracle,他会选择sequence方式;只是在使用oracle数据库时,需要创建一个hibernate_sequence,这是hibernate保留的,不建会报错(测试过)。

如下是完全的代码:

Model:

package com.gwtjs.model;

/**

* @hibernate.class table="t_user"

*/

public class User {

/**

* @hibernate.id generator-class="native" length="32"

*/

private int id;

/**

* @hibernate.property type="string" length="32" unique="true" not-null="true"

*/

private String userName;

/**

* @hibernate.property type="string" length="32" not-null="true"

*/

private String userPwd;

public int getId() {

return id;

}

public void setId(int id) {

this.id = id;

}

public String getUserName() {

return userName;

}

public void setUserName(String userName) {

this.userName = userName;

}

public String getUserPwd() {

return userPwd;

}

public void setUserPwd(String userPwd) {

this.userPwd = userPwd;

}

}

hibernate   mapping

oracle表创建脚本:

-- Create table

create table T_USER

(

id NUMBER(10) not null,

username VARCHAR2(32) not null,

userpwd VARCHAR2(32) not null

)

tablespace FOUNDDB

pctfree 10

initrans 1

maxtrans 255

storage

(

initial 64K

minextents 1

maxextents unlimited

);

-- Create/Recreate primary, unique and foreign key constraints

alter table T_USER

add primary key (ID)

using index

tablespace FOUNDDB

pctfree 10

initrans 2

maxtrans 255

storage

(

initial 64K

minextents 1

maxextents unlimited

);

alter table T_USER

add unique (USERNAME)

using index

tablespace FOUNDDB

pctfree 10

initrans 2

maxtrans 255

storage

(

initial 64K

minextents 1

maxextents unlimited

);

hibernate_sequence创建脚本

-- create user table sequence

create sequence t_user_seq

minvalue 1

maxvalue 9999999999

start with 1

increment by 1

nocache;

-- 公用的主键标识seq

CREATE SEQUENCE HIBERNATE_SEQUENCE MINVALUE 1 MAXVALUE 999999999999999999999999 INCREMENT BY 1 NOCYCLE;

-- 插入用户的触发器

create or replace trigger tri_insert_user

before insert on t_user

for each row

begin

select t_user_seq.nextval into :new.id from dual;

end;

Hibernate   DAO

public class UserManagerImpl extends AbstractSearch implements UserManager {

public void saveOrUpdate(User u){

getHibernateTemplate().saveOrUpdate(u);

}

public void delete(int id){

getHibernateTemplate().delete(getUser(id));

}

public User getUser(int id){

return (User)getHibernateTemplate().get(User.class,id);

}

}

DAO  TEST  Base Class

public class DaoTestBase extends AbstractTransactionalDataSourceSpringContextTests {

protected String[] getConfigLocations() {

this.setAutowireMode(AUTOWIRE_BY_NAME);

this.setDefaultRollback(false);

return new String[]{

"classpath:spring-config.xml",

"classpath:/config/spring/applicationContext-dao.xml"

};

}

public void testConfig(){

assertNotNull("spring-mock context has bean init ",this.applicationContext);

}

}

User DAO  Test

public class UserManagerTest extends DaoTestBase {

private UserManager userManager;

public void testSave(){

User u = new User();

u.setUserName("admin888");

u.setUserPwd("654123");

userManager.saveOrUpdate(u);

logger.info(u.getId());

System.out.println("高度啊: "+u.getId());

userManager.delete(u.getId());

}

public void setUserManager(UserManager userManager){

this.userManager = userManager;

}

}

spring bean

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="

http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

完美的测试成功

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/533328.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

export Oracle_sid =asm,单实例下oracle数据库从文件系统迁移到ASM上

第一步:启动ASM实例(ASM)[oracleoracle ~]$ export ORACLE_SIDASM[oracleoracle ~]$ sqlplus / as sysdbaSQL*Plus: Release 10.2.0.5.0 - Production on Tue Jan 18 13:25:46 2011Copyright (c) 1982, 2010, Oracle. All Rights Reserved.Connected to:Oracle Dat…

linux命令行的操作符,如何在Linux命令行中进行基本的数学运算

原标题:如何在Linux命令行中进行基本的数学运算Linux bash或命令行允许您执行基本和复杂的算术和布尔运算。像expr,jot,bc和factor等命令可以帮助您找到复杂问题的最优数学解决方案。在本文中,我们将描述这些命令并提供示例&#…

在linux关闭的命令,关于关闭Linux计算机的命令操作

关于关闭Linux计算机的命令操作shutdown -h now 立即关机shutdown -r now 立即重启Linux命令:shutdown功能说明:系统关机指令。语法:shutdown [-efFhknr][-t 秒数][时间][警告信息]补充说明:shutdown指令可以关闭所有程序&#xf…

linux什么用户什么任务,linux任务里的1 和2是什么意思

输出学过代码的小伙伴应该知道STDIN、STDOUT、STDERR通常都是指定输出通道的,perl里又称之为句柄那么1代表的就是STDOUT、2代表的是STDERR、jimmy在视频中会翻译成1代表的是正确输出,2代表的是错误输出。其实严格上不能这样去固有化去理解每一个软件的定…

linux 命令 查询丢包率,linux测试丢包率的命令 linux查看丢包率命令

关于用ping命令测网络延迟和丢包率?在工作中,ping命令用于测试网络是否可以连接。其次是网络连接的稳定性,也就是所谓的丢包率。延时参数可手动设定,影响因素较多。输入windows dos并输入Ping/all以查看所有参数分析和单个示例。L…

linux http连接超时时间设置,Linux 下 HTTP连接超时

将项目部署到现场环境,HTTP请求莫名奇妙的连接超时,通过抓包定位了问题,是请求的IP被禁止掉。其中用到了抓包,将记录记录于此。tcpdump host 120.197.89.51 -i any -vvv::06.241085 IP (tos 0x0, ttl , id , offset , flags [DF],…

linux 库的头文件安装在,“找不到jpeg的头文件或库文件”在Alpine Linux上安装枕头...

我试图在基于python:alpine的Docker容器中运行Python的Scrapy。它以前是有效的,但现在我想使用Scrapy的Image Pipeline这需要我安装枕头。作为一个简单的例子,我尝试了以下Dockerfile:FROM python:alpineRUN apk --update add libxml2-dev li…

linux .desktop权限,如何在Ubuntu Xenial Xerus 16.04 Linux Desktop上以root用户身份登录

您可能已经注意到,默认情况下,Ubuntu Xenial Xerus 16.04 Linux Desktop不具备以root管理员用户身份登录的功能。每次尝试以root用户身份在终端上登录都会导致Login incorrect错误信息:。默认的Ubuntu Linux桌面行为的背后原因是,…

DBackup环境部署linux,linux_BackupPC 安装部署

yum installperl-Compress-Zlib perl-Archive-Zip perl-File-RsyncP perl-XML-RSShttpdyum-y install perl-suidperl mod_perlrpm -ivhbackuppc_community-3.2.0beta0-1.rhel5.noarch.rpm1- 上面安装会创建backuppc,apache用户。vi/etc/httpd/conf/httpd.conf修改‘User apache…

linux18配置静态ip,ubuntu18配置静态IP地址

xavier NX板子上安装的事ubuntu18, 简单记录一下ubuntu18如何配置静态IP地址。首先生成一下文件:sudo netplan generate运行这一句的时候如果提示netplan command not found,执行下面的命令sudo apt install netplan.io然后创建文件sudo vim /etc/netpla…

2048游戏c语言linux简易代码,C语言实现2048游戏代码

本文实例为大家分享了C语言实现2048游戏具体代码,供大家参考,具体内容如下效果图:使用文本界面的屏幕绘图库 ncurses.设计思路:在满足条件情况下消除方块允许在游戏主界面(16 宫格)中任意一格输出数据实现代码:#include #include #include #include #inc…

linux访问网站出现443,Linux访问网站一直出现超时

问题描述:开发java应用时,需要访问此网站,在windows上一切正常访问,部署到linux服务器上就出现了访问超时[rootVM_18_115_centos ~]# wget https://wap.zhengzhoubus.com/buswechat/WifiBusInterface/transfer/line!getLineAll.ac…

linux十大证书,验证Linux上的X.509证书

openssl verify会做你想要什么,如果你想有一个简单的工具:从运行:cd /usr/share/ca-certificatesfind . -type f -exec openssl -verify {} \;这里有一个选择的输出:./telesec.de/deutsche-telekom-root-ca-2.crt: OK./brasil.gov…

linux shell结构,linux——Shell的控制结构(附shell编写代码和运行结果)

针对shell的控制结构,也就是shell编程时所需要的三种控制流程,顺序/分支和循环。在bash中,顺序可由简单的输入输出命令组成;分支语句由if、case实现;循环语句用for、while和until来实现。一、if语句1、基本的if语句语句…

c语言里字符串和字符串字面量,string literals(字符串字面量)

构造一个指定字符数组类型的未命名对象,用于需要在源代码中嵌入字符串时使用。句法" s-char-sequence "(1)u8 " s-char-sequence "(2)(since C11)u " s-char-sequence "(3)(since C11)U " s-char-sequence "(4)(since C11)…

c语言 函数指针开销,函数指针是否使程序变慢?

AnT..82您可以看到,在从性能角度来看实际上很重要的情况下,例如在一个周期中多次重复调用该函数,性能可能根本不同.这对于人们来说可能听起来很奇怪,他们习惯于将C代码视为由抽象的C机器执行的,其机器语言与C语言本身密切相关.在这种情况下,"默认情况下"对函数的间接…

tms320c2000 c语言伪指令,TMS320F240XDSP汇编及C语言多功能控制应用(附光盘)

摘要:本书以SNF2407M实验开发系统配合CPLD的SNDSP2407P接口,以简易的C语言和快速的汇编语言编写达20个以上的范例实验及多个专题制作,主要内容如下:TMS320LF2407系列MCU的硬件架构,内存配置及指令格式和其运作功能;C2000的CC或CCS程序的编辑,编译及除错等操作;DSP搭…

用C语言编写绳索运动函数,福建省教师招聘考试小学数学真题试卷

2014年福建省中小学新任教师公开招聘考试小学数学试卷(课程代码09202)1. 本试卷满分150分,考试时间120分钟。2. 本试卷分为两部分:第一部分为选择题,第二部分为非选择题。3. 请把所有答案涂、写在答题卡上。不要错位、越界答题.一、单项选择题…

c语言 三个小球排排坐,关颖三个孩子排排坐 太萌啦

0关颖三个孩子排排坐 太萌啦2019-12-10 10:596月20日,关颖在微博上晒出三个孩子坐在垫子上的照片,配文:“Terrible two has officially started today. Happy happy birthday Phi Phi! 家庭乐趣其中一件事情 就是和小朋友不断的唱生日歌吹蜡烛…

大学生学C语言用什么笔记本电脑,有哪些适合大学生用的笔记本电脑

高考成绩公布之后又有一大波新大学生即将入学,笔记本电脑也将是大学生必不可少的一款电子数码产品,但是现在市面上电脑繁多,又有哪些比较不错的电脑适合新入学的大学生呢?惠普 HP Envy 13 (2019)现在,最适合学生的笔记…