日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發布時間:2025/3/8 编程问答 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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">

完美的測試成功

總結

以上是生活随笔為你收集整理的hibernate native oracle,hibernate native 主键生成策略的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。