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.pswp.cn/news/533328.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/533328.shtml
英文地址,請注明出處:http://en.pswp.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)現在,最適合學生的筆記…