日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷(xiāo)解決方案
概述Hibernate對(duì)象標(biāo)識(shí)符

Hibernate有很多值得學(xué)習(xí)的地方,這里我們主要介紹對(duì)象標(biāo)識(shí)符,包括介紹Hibernate內(nèi)置的UUID生成器算法等方面。

站在用戶的角度思考問(wèn)題,與客戶深入溝通,找到鐵東網(wǎng)站設(shè)計(jì)與鐵東網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗(yàn),讓設(shè)計(jì)與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個(gè)性化、用戶體驗(yàn)好的作品,建站類(lèi)型包括:成都網(wǎng)站設(shè)計(jì)、成都網(wǎng)站制作、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣、主機(jī)域名、網(wǎng)絡(luò)空間、企業(yè)郵箱。業(yè)務(wù)覆蓋鐵東地區(qū)。

我們需要的是通用唯一標(biāo)識(shí)符(UUID)。UUID是由標(biāo)準(zhǔn)格式化的16個(gè)字節(jié)大小的(128位)數(shù)字組成的。UUID的字符串版本是像這樣的:2cdb8cee-9134-453f-9d7a-14c0ae8184c6(大家應(yīng)該可以注意到, Jmatrix目前就是使用的UUID)

里面的字符是數(shù)字簡(jiǎn)單的按字節(jié)的16進(jìn)制表示,橫線把數(shù)字的不同部分分割開(kāi)來(lái)。這種格式簡(jiǎn)單而且易于處理,只是36個(gè)字符有點(diǎn)兒太長(zhǎng)了。因?yàn)闄M線總是被安置在相同的位置,所以可以把它們?nèi)サ舳炎址臄?shù)目減少到32個(gè)。用一種更為簡(jiǎn)潔的表示方法,你可以創(chuàng)建一個(gè)byte[16]的數(shù)組或是兩個(gè)8字節(jié)大小的長(zhǎng)整型(long)來(lái)保存這些數(shù)字。如果你使用的是Java1.5或更高版本,你可以直接使用UUID類(lèi),雖然這不是它在內(nèi)存中最簡(jiǎn)潔的格式。如果你要獲得更多的信息,請(qǐng)參閱Wikipedia 的UUID條目 或 Java UUID參考文檔。

對(duì)UUID的產(chǎn)生算法有多種實(shí)現(xiàn)。既然最終UUID是一種標(biāo)準(zhǔn)格式,我們?cè)贗dGenerator類(lèi)中采用哪一種實(shí)現(xiàn)都沒(méi)有關(guān)系。既然無(wú)論采用什么算法每個(gè)id都會(huì)被保證唯一,我們甚至可以在任何時(shí)候改變算法的實(shí)現(xiàn)或是混合匹配不同的實(shí)現(xiàn)。如果你使用的是java1.5或更高版本,最方便的實(shí)現(xiàn)是 java.util.UUID類(lèi)。

 
 
 
  1. public class IdGenerator {   
  2. public static String createId() {   
  3. UUID uuid = java.util.UUID.randomUUID();  
  4. return uuid.toString();  
  5. }  

對(duì)不使用java1.5或更高版本的人來(lái)說(shuō),至少有兩種擴(kuò)展庫(kù)實(shí)現(xiàn)了UUID并且和1.5之前的java版本兼容: Apache Commons ID project 和 Java UUID Generator(JUG) project.它們都在Apache的旗下。(在LGPL之下JUG也是可用的)

這是使用JUG庫(kù)實(shí)現(xiàn)IdGenerator的例子。

 
 
 
  1. import org.safehaus.uuid.UUIDGenerator;  
  2. public class IdGenerator {  
  3. public static final UUIDGenerator uuidGen = UUIDGenerator.getInstance();   
  4. public static String createId() {   
  5. UUID uuid = uuidGen.generateRandomBasedUUID();   
  6. return uuid.toString();  
  7. }  

Hibernate內(nèi)置的UUID生成器算法又如何呢?這是一個(gè)得到驗(yàn)證對(duì)象標(biāo)識(shí)用的UUID的適當(dāng)途徑嗎?如果你想讓對(duì)象標(biāo)識(shí)符獨(dú)立于對(duì)象的持久化,這就不是一個(gè)好方法。雖然Hibernate確實(shí)提供有讓它為你生成UUID的選項(xiàng),但這樣的話我們又回到了那個(gè)最早的問(wèn)題上:對(duì)象ID的獲得并不在它們被創(chuàng)建的時(shí)候,而在它們被保存的時(shí)候。

使用UUID作為數(shù)據(jù)庫(kù)主鍵的***障礙是它們?cè)跀?shù)據(jù)庫(kù)中(而不是在內(nèi)存中)的大小,在數(shù)據(jù)庫(kù)中索引和外鍵的復(fù)合會(huì)促使主鍵大小的增加。你必須在不同的情況下使用不同的表示方法。使用String表示,數(shù)據(jù)庫(kù)的主鍵大小將會(huì)是32或36字節(jié)。Id也可以直接使用位存儲(chǔ),這樣將減少一半的占用空間,但是如果你直接查詢數(shù)據(jù)庫(kù),id將變得難以理解。這些方法對(duì)你的工程是否可行取決于你的需求。 如果你的數(shù)據(jù)庫(kù)不接受UUID作為主鍵,你可以考慮使用數(shù)據(jù)庫(kù)序列。但總是應(yīng)該讓新對(duì)象創(chuàng)建的時(shí)候被指派一個(gè)ID而不是讓Hibernate管理你的ID。在這種情況下,創(chuàng)建新的域?qū)ο蟮纳虡I(yè)對(duì)象可以調(diào)用一個(gè)使用data Access object(DAO)從數(shù)據(jù)庫(kù)序列中獲取數(shù)據(jù)庫(kù)id的服務(wù)。如果你使用一個(gè)長(zhǎng)整型來(lái)表示你的對(duì)象id,一個(gè)單獨(dú)的數(shù)據(jù)庫(kù)序列(以及服務(wù)方法)對(duì)你的域?qū)ο髞?lái)說(shuō)已經(jīng)足夠了。

小結(jié)

當(dāng)對(duì)象持久化到數(shù)據(jù)庫(kù)中時(shí),對(duì)象標(biāo)識(shí)符總時(shí)很難被恰當(dāng)?shù)膶?shí)現(xiàn)。盡管如此,問(wèn)題其實(shí)完全是由存在著在保存之前不持有ID的對(duì)象的現(xiàn)象衍生而來(lái)的。我們可以通過(guò)從諸如Hibernate這樣的對(duì)象—關(guān)系映像框架手中取走指派對(duì)象ID的職責(zé)來(lái)解決這個(gè)問(wèn)題。相對(duì)的,一旦對(duì)象被實(shí)例化,它就應(yīng)該被指派一個(gè)ID。這使對(duì)象標(biāo)識(shí)符變成簡(jiǎn)單而不易出錯(cuò),也減少了領(lǐng)域模型中需要的代碼量。

【編輯推薦】

  1. Hibernate Util簡(jiǎn)單討論
  2. 詳解優(yōu)化Hibernate性能經(jīng)驗(yàn)
  3. 概述Hibernate dbcp連接池使用方法
  4. 淺析Hibernate.cfg.xml配置
  5. Hibernate Shard基礎(chǔ)分析

網(wǎng)頁(yè)名稱(chēng):概述Hibernate對(duì)象標(biāo)識(shí)符
網(wǎng)站URL:http://www.5511xx.com/article/djihiid.html