亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? 用oracle的trigger生成主鍵的時(shí)候和hibernate沖突的討論.txt

?? Hibernate使用說明書
?? TXT
字號:
作者:robbin (MSN:robbin_fan AT hotmail DOT com)

版權(quán)聲明:本文嚴(yán)禁轉(zhuǎn)載,如有轉(zhuǎn)載請求,請和作者聯(lián)系

oracle的trigger和hibernate沖突

capitain write:

我們的數(shù)據(jù)庫定義mapping使用了

<id name="id" column="ID" type="long">
    <generator class="sequence">
        <param name="sequence">seq_somename</param>
    </generator>
</id>

但是這樣做 我發(fā)現(xiàn) hibernate會取得一次sequence, 同時(shí)數(shù)據(jù)庫還有一個(gè)triger會取得一次sequence, 這樣實(shí)際的sequence會加2了!! 而且create返回的對象的主鍵id也是錯(cuò)誤的, 因?yàn)檫€被triger加了1, 數(shù)據(jù)庫里面的記錄全面是雙數(shù), 2,4,6,8 create返回主鍵卻是1,3,5,7 請問 這樣問題怎么解決, 因?yàn)閠riger不能刪除, 能讓hibernate利用triger生成的取值嗎? 

我查看了hibernate的文檔和源代碼, 發(fā)現(xiàn)generator 為 sequence時(shí)候

它最后會調(diào)用這個(gè)方法

dialect下面的Oracle9Dialect中的

    public String getSequenceNextValString(String sequenceName) {
        return "select " + sequenceName + ".nextval from dual";
    }

triger再這么走一遍 sequence必然是加入2次

我使用native,發(fā)現(xiàn)工作結(jié)果和sequence一樣, 難道沒有辦法解決了嗎?

robbin write:

我有一個(gè)最簡單的解決辦法:

看Hibernate2.0.3源代碼的net.sf.hibernate.dialect.Oracle9Dialect第78行:

public String getSequenceNextValString(String sequenceName) {
  return "select " + sequenceName + ".nextval from dual";
}

只要我們把它改成下面這個(gè)樣子,就行了:

public String getSequenceNextValString(String sequenceName) {
  return "select " + sequenceName + ".currval + 1 from dual";
}

也就是說Hibernate去取序列值的時(shí)候,不讓序列加1,只取當(dāng)前值然后加1返回,插入的時(shí)候讓trigger來給序列加1

因此你可以這樣來做,寫一個(gè)新的Dialect:

package net.sf.hibernate.dialect;

public class OracleMyDialect extends OracleDialect {
  public String getSequenceNextValString(String sequenceName) {
    return "select " + sequenceName + ".currval + 1 from dual";
  }
}

編譯好以后放在CLASSPATH里面,配置Hibernate

hibernate.dialect net.sf.hibernate.dialect.OracleMyDialect

這樣就行了,解決掉你那個(gè)問題了。

capitain write:

謝謝, 我對oracle很不熟悉, 不知道,這樣只加一 如果在多個(gè)連接向數(shù)據(jù)庫內(nèi)插入記錄的時(shí)候, 會不會有問題, 

換句話說,不知道hibernate里面這個(gè)getSequenceNextValString()和triger發(fā)生之間時(shí)間內(nèi)如果有插入會有問題嗎? 不知道oracle的驅(qū)動能不能保證這是一個(gè)原子操作?

robbin write:

不能夠保證原子性,可能會有并發(fā)訪問的沖突。不過目前來說你也只能如此了,說實(shí)話這個(gè)辦法只能算是權(quán)宜之計(jì)。

由于session.save() 需要返回主鍵,所以當(dāng)你使用trigger來創(chuàng)建id的時(shí)候,Hibernate是無法知道trigger當(dāng)前創(chuàng)建的主鍵是什么,不論你用

select sequ.currval from dual;

還是

select max(id) from table_name;

在插入數(shù)據(jù)之后來獲得主鍵,都有并發(fā)沖突的可能性。唯一的避免并發(fā)沖突的辦法是:

insert into table_name ...   returning :id;

用Oracle特有的這個(gè)sql來插入數(shù)據(jù),返回主鍵,讓Hibernate知道主鍵的值,不過Hibernate目前并不能夠支持這個(gè)sql語句,如果要讓Hibernate支持這個(gè)sql,需要對源代碼做相當(dāng)大的改動。看看以后會不會加吧。

這個(gè)問題我不是第一次和別人討論了,確實(shí)沒有好的解決辦法,除非對Hibernate進(jìn)行大面積修改。但是話說回來,我用Oracle那么多年了,從來都不使用trigger實(shí)現(xiàn)Auto increment字段,我個(gè)人認(rèn)為這種方式不好。本來Oracle已經(jīng)把sequence從字段里面解放出來了,你還要在把它放回去。不用trigger一樣可以生成主鍵,看兩個(gè)例子:

插入單條數(shù)據(jù):

insert table_name(id, name,...) values(sequ.nextval, ....);

批量插入數(shù)據(jù):

insert table_name(id, name,...)  select sequ.nextval, name,...  from table2_name;

richart write:

這么做的話,最好是用一下nvl()函數(shù)(oracle自帶),而且只能改動oracle相關(guān)的一個(gè)類。如果使用的是別的數(shù)據(jù)庫,不知道有沒有相似的問題存在?

robbin write:

oldma 寫道:呵呵,誰能給解釋一下?

看下面的PL/SQL:

create trigger y before insert on bob
  for each row
  when (new.a is null)
  begin
    select x.nextval into :new.a from dual;
  end;

用trigger來讀sequence,插入表的主鍵字段,模擬SQL Server中的Auto Increment 字段

capitain write:

那oracle還有什么標(biāo)準(zhǔn)的辦法實(shí)現(xiàn)Auto Increment 字段? 我們目前的程序插入的時(shí)候是按照auto increment字段來的, 就是不寫id那個(gè)字段, 讓數(shù)據(jù)庫操作, 請問其他辦法可以適用嗎?

mikeho write: 

是的,oracle是不必再寫sp了,我們以前是在SQL server里面寫了個(gè)sp來生成seq,沒有用自增長,因?yàn)樽栽鲩L在方法調(diào)用后返回id比較麻煩。現(xiàn)在都使用模擬UUID了(只有50位,理論上有重復(fù)建的危險(xiǎn),呵呵)。
 


--------------------------------------------------------------------------------
 

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产亚洲成av人在线观看导航| 视频一区视频二区中文字幕| 日韩午夜三级在线| 欧美日韩一区二区三区免费看| 波多野结衣视频一区| 久久福利资源站| 久久av资源站| 另类专区欧美蜜桃臀第一页| 久久精品一区二区| 国产精品热久久久久夜色精品三区| 久久久久免费观看| 精品久久一区二区| 久久精品免视看| 国产欧美一区二区在线观看| 国产欧美精品一区二区色综合 | 538在线一区二区精品国产| 色先锋久久av资源部| 粉嫩一区二区三区性色av| 国产高清视频一区| 福利视频网站一区二区三区| 9l国产精品久久久久麻豆| 不卡电影免费在线播放一区| 国产成人精品三级| 色哟哟在线观看一区二区三区| 99久久久无码国产精品| 99精品久久久久久| 欧美丝袜自拍制服另类| 欧美日韩国产在线观看| 91麻豆精品国产综合久久久久久| 日韩欧美一区在线观看| 欧美一级理论片| 欧美大片免费久久精品三p| 久久久不卡网国产精品二区| 国产精品视频一二三| 一区二区三区免费看视频| 午夜影院久久久| 精品伊人久久久久7777人| 成人午夜电影久久影院| 色综合久久天天| 欧美日韩三级视频| 久久婷婷成人综合色| 亚洲国产精品精华液2区45| 亚洲视频在线观看一区| 免费观看久久久4p| 国产91清纯白嫩初高中在线观看 | 久久国产精品99久久久久久老狼| 福利一区二区在线| 色94色欧美sute亚洲13| 欧美日韩一区二区欧美激情| 久久久亚洲综合| 亚洲欧美国产三级| 一区二区成人在线观看| 老汉av免费一区二区三区| 国产黄色精品网站| a级精品国产片在线观看| 欧美日本在线播放| 91精选在线观看| xfplay精品久久| 国产精品久久久久影院| 亚洲狠狠爱一区二区三区| 国产一区 二区| 色美美综合视频| 精品不卡在线视频| 亚洲国产日日夜夜| 国产精品一区二区黑丝| 欧美人成免费网站| 国产精品麻豆一区二区| 奇米777欧美一区二区| 色妞www精品视频| 精品国产第一区二区三区观看体验| 中文字幕一区二区三区色视频| 精品一区二区久久| 欧美在线观看视频在线| 精品福利av导航| 亚洲国产视频网站| 成人av电影在线| 国产校园另类小说区| 调教+趴+乳夹+国产+精品| 国内精品久久久久影院色| 欧美日韩国产bt| 国产精品久久久爽爽爽麻豆色哟哟| 精品无人码麻豆乱码1区2区| 91丝袜国产在线播放| 久久综合九色综合97婷婷| 国产精品白丝在线| 激情伊人五月天久久综合| 欧美日韩精品一区二区在线播放| 中文字幕第一区综合| 理论片日本一区| 制服丝袜成人动漫| 一区二区在线观看av| 99免费精品在线观看| 久久精品人人做人人综合| 另类的小说在线视频另类成人小视频在线 | 欧美国产乱子伦| 久久精品理论片| 91精品福利在线一区二区三区| 一区二区三区四区不卡在线| 成人综合在线观看| 国产精品午夜久久| 国产麻豆成人传媒免费观看| 91热门视频在线观看| 国产精品久久久久一区 | 欧洲精品在线观看| 一区二区三区国产| 99精品国产视频| 久久久无码精品亚洲日韩按摩| 国产伦精品一区二区三区免费迷| 在线播放视频一区| 蜜桃av一区二区三区| 91精品国产综合久久小美女 | 色婷婷av一区| 亚洲色图.com| 9久草视频在线视频精品| 亚洲日本欧美天堂| 99国内精品久久| 亚洲一区二区三区四区在线| 成人国产在线观看| 国产精品国产三级国产a | 欧美精品在线观看播放| 午夜激情久久久| 欧美久久久久久久久久| 免费的成人av| 欧美xxxxx牲另类人与| 日本不卡中文字幕| 久久久久高清精品| 国内一区二区在线| 综合久久给合久久狠狠狠97色| 成人av电影在线播放| 亚洲女人小视频在线观看| 欧美日韩国产免费| 蜜桃精品在线观看| 国产精品视频一区二区三区不卡| jizzjizzjizz欧美| 亚洲免费观看高清| 日韩一区二区免费电影| 麻豆极品一区二区三区| 亚洲最新在线观看| 欧美精品一二三| 日日夜夜免费精品视频| 国产农村妇女毛片精品久久麻豆| 福利电影一区二区三区| 一区二区成人在线视频| 91精品国产手机| 久久99精品久久只有精品| 国产精品人妖ts系列视频| 91福利精品第一导航| 精品一区二区在线观看| 国产精品麻豆久久久| av在线不卡免费看| 蜜桃在线一区二区三区| 日韩精品一二三区| 久久久久高清精品| 一本大道久久a久久精二百| 一区二区三区国产| 精品成a人在线观看| 91小视频免费观看| 国产麻豆精品视频| 亚洲精品国产精华液| 久久久精品tv| 欧美日韩成人激情| 精品一区二区三区视频| 亚洲一级二级在线| 精品国产乱码久久久久久老虎| 在线国产亚洲欧美| 精彩视频一区二区| 1000部国产精品成人观看| 欧美一级国产精品| 9i在线看片成人免费| 国产综合久久久久久久久久久久| 国产精品进线69影院| 色综合久久久久综合| 国产精品中文欧美| 亚洲综合一区二区三区| 国产精品久久久久婷婷| 7777精品伊人久久久大香线蕉| 国产一区二区在线免费观看| 亚洲男人都懂的| 久久青草欧美一区二区三区| 91精品国产高清一区二区三区 | 欧美精品一区男女天堂| 欧美日本一区二区在线观看| 成人自拍视频在线| 亚洲大片免费看| 精品久久久久久综合日本欧美| 99久久免费视频.com| 国产揄拍国内精品对白| 婷婷开心久久网| 亚洲免费在线视频一区 二区| 精品国免费一区二区三区| 欧美猛男男办公室激情| 色综合久久中文字幕综合网| 国内一区二区在线| 激情小说亚洲一区| 视频一区国产视频| 午夜激情久久久| 亚洲综合免费观看高清完整版在线 | 精品一区二区三区久久| 亚洲成av人片在线| 亚洲码国产岛国毛片在线|