成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

概述Hibernate對象標識符

開發 后端
這里介紹Hibernate對象標識符,以及介紹Hibernate內置的UUID生成器算法又如何呢?這是一個得到驗證對象標識用的UUID的適當途徑嗎?如果你想讓對象標識符獨立于對象的持久化,這就不是一個好方法。

Hibernate有很多值得學習的地方,這里我們主要介紹對象標識符,包括介紹Hibernate內置的UUID生成器算法等方面。

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

里面的字符是數字簡單的按字節的16進制表示,橫線把數字的不同部分分割開來。這種格式簡單而且易于處理,只是36個字符有點兒太長了。因為橫線總是被安置在相同的位置,所以可以把它們去掉而把字符的數目減少到32個。用一種更為簡潔的表示方法,你可以創建一個byte[16]的數組或是兩個8字節大小的長整型(long)來保存這些數字。如果你使用的是Java1.5或更高版本,你可以直接使用UUID類,雖然這不是它在內存中最簡潔的格式。如果你要獲得更多的信息,請參閱Wikipedia 的UUID條目 或 Java UUID參考文檔。

對UUID的產生算法有多種實現。既然最終UUID是一種標準格式,我們在IdGenerator類中采用哪一種實現都沒有關系。既然無論采用什么算法每個id都會被保證唯一,我們甚至可以在任何時候改變算法的實現或是混合匹配不同的實現。如果你使用的是java1.5或更高版本,最方便的實現是 java.util.UUID類。

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

對不使用java1.5或更高版本的人來說,至少有兩種擴展庫實現了UUID并且和1.5之前的java版本兼容: Apache Commons ID project 和 Java UUID Generator(JUG) project.它們都在Apache的旗下。(在LGPL之下JUG也是可用的)

這是使用JUG庫實現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內置的UUID生成器算法又如何呢?這是一個得到驗證對象標識用的UUID的適當途徑嗎?如果你想讓對象標識符獨立于對象的持久化,這就不是一個好方法。雖然Hibernate確實提供有讓它為你生成UUID的選項,但這樣的話我們又回到了那個最早的問題上:對象ID的獲得并不在它們被創建的時候,而在它們被保存的時候。

使用UUID作為數據庫主鍵的***障礙是它們在數據庫中(而不是在內存中)的大小,在數據庫中索引和外鍵的復合會促使主鍵大小的增加。你必須在不同的情況下使用不同的表示方法。使用String表示,數據庫的主鍵大小將會是32或36字節。Id也可以直接使用位存儲,這樣將減少一半的占用空間,但是如果你直接查詢數據庫,id將變得難以理解。這些方法對你的工程是否可行取決于你的需求。 如果你的數據庫不接受UUID作為主鍵,你可以考慮使用數據庫序列。但總是應該讓新對象創建的時候被指派一個ID而不是讓Hibernate管理你的ID。在這種情況下,創建新的域對象的商業對象可以調用一個使用data Access object(DAO)從數據庫序列中獲取數據庫id的服務。如果你使用一個長整型來表示你的對象id,一個單獨的數據庫序列(以及服務方法)對你的域對象來說已經足夠了。

小結

當對象持久化到數據庫中時,對象標識符總時很難被恰當的實現。盡管如此,問題其實完全是由存在著在保存之前不持有ID的對象的現象衍生而來的。我們可以通過從諸如Hibernate這樣的對象—關系映像框架手中取走指派對象ID的職責來解決這個問題。相對的,一旦對象被實例化,它就應該被指派一個ID。這使對象標識符變成簡單而不易出錯,也減少了領域模型中需要的代碼量。

【編輯推薦】

  1. Hibernate Util簡單討論
  2. 詳解優化Hibernate性能經驗
  3. 概述Hibernate dbcp連接池使用方法
  4. 淺析Hibernate.cfg.xml配置
  5. Hibernate Shard基礎分析
責任編輯:佚名 來源: IT168
相關推薦

2012-02-08 14:01:18

HibernateJava

2009-08-26 14:01:18

C#標識符

2009-10-27 14:20:37

VB.NET動態標識符

2011-03-14 10:17:40

JavaScript

2022-07-17 06:57:02

時間戳唯一標識符

2010-01-15 18:17:39

VB.NET動態標識

2023-08-22 08:52:14

Go零值標識符

2009-12-08 19:29:10

PHP生成唯一標識符

2009-06-26 18:07:12

JSF客戶端標識符

2025-01-26 10:35:42

Go語言類型

2017-04-21 12:30:45

AndroidAndroid O設備標識符

2009-07-21 12:59:25

Scala標識符

2023-05-28 00:09:21

2009-06-29 08:48:41

Hibernate緩存

2009-09-29 16:04:29

Hibernate S

2023-09-26 07:28:47

2024-06-05 08:47:20

Go語言方式

2024-04-07 00:00:02

Android設備標識符

2009-07-09 17:02:04

JDK學習筆記數據類型

2023-03-13 10:01:27

Java注釋
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 亚洲精品资源 | 中文字幕在线观看一区二区 | 色综合久 | 91精品麻豆日日躁夜夜躁 | 成人精品毛片国产亚洲av十九禁 | 成人精品鲁一区一区二区 | 91免费福利在线 | 国产欧美一区二区三区在线看 | 五月精品视频 | 鲁视频| 欧美一区二区大片 | 国产二区在线播放 | 日韩美女一区二区三区在线观看 | 日韩专区中文字幕 | 免费在线视频一区二区 | 中文字幕精品一区二区三区精品 | 国产成人综合久久 | 国内av在线 | 欧美精品一区二区三区四区 | 看av片网站 | 欧美精品一区三区 | 成人国产精品 | 中文字幕男人的天堂 | 中文在线一区 | 国产精品不卡一区 | 一级欧美一级日韩片 | 精品亚洲一区二区三区四区五区高 | 精品在线一区 | 国产精品成人一区二区三区 | 一区二区三区久久 | 亚洲图片一区二区三区 | 亚洲国产精品99久久久久久久久 | 亚洲一区二区精品视频在线观看 | 精品国产一区二区在线 | 久久黄视频 | 亚洲性在线 | 81精品国产乱码久久久久久 | 9191在线观看 | 福利视频网址 | 91 在线| 香蕉视频一区二区 |