Hibernate實體類編寫規則和主鍵策略
一、實體類的編寫規則
1、屬性要是私有的。
2、要有公開的setter和getter方法供外界訪問和修改。
3、每一個實體類要有一個屬性作為唯一值(一般都是使用對於數據表的主鍵)。
4、建議數據類型不要使用基本的數據類型,而是使用相應的包裝類。
5、Java中對應的包裝類
基本數據類型 | 對應包裝類 |
int | Integer |
char | Character |
boolean | Boolean |
float | Float |
double | Double |
short | Short |
long | Long |
byte | Byte |
使用包裝類的原因:因為有時候使用基本數據類型無法準確表示一些場景。
例:score代表學生的成績,但是在考試時可能存在缺考的情況,如果使用int數據類型,則score = 0表示考了分,但是缺考還是score =
0,這樣無法區分;如果使用Integer,則要是缺考,score = null;這樣就可以區分是考了0分還是缺考。
二、主鍵生成策略
1、Hibernate要求在一個實體中必須要有一個屬性作為唯一值,這個唯一值一般都對應表中的主鍵。
2、主鍵分類
自然主鍵:把具有業務含義的字段作為主鍵,稱之為自然主鍵。
代理主鍵:把不具有業務含義的字段作為主鍵,稱之為代理主鍵。
3、主鍵的常見生成策略有七種
(1)increment :用於long、short或int類型的,由Hibernate自動由遞增的方式生成唯一標識符,每次增長1.
只有當沒有其他線程向同一張表中插入數據時使用。不能在集群情況下使用,適用於代理主鍵。
(2)identity:采用底層數據庫提供的本身提供的主鍵生成標識符,前提是數據庫必須支持自增長的數據類型。
在DB2、mysql、MS SQL SERVER、Sybase和HypersonicSQL數據庫中可以使用該策略,該策略
要求在數據庫中把主鍵定義為自增長,適用於代理主鍵。
(3)sequence:Hibernate根據底層數據庫序列生成標識符。條件是數據庫要支持序列,Oracle數據庫可以使用該策略
適用於代理主鍵。
(4)hilo:hilo:通過hi/lo 算法實現的主鍵生成機制,需要額外的數據庫表保存主鍵生成歷史狀態。
(5)native:根據底層數據庫對自動生成表示符的能力來自動選擇identity、sequence和hilo三種生成器中的一種。
適合跨數據庫平臺開發,適用於代理主鍵。
(6)uuid:Hibernate采用128位的UUID來生成字符,使用16進制表示,使用該策略時主鍵必須定義為String類型,
由於其所占的空間較多,使用較少,適用於代理主鍵。
(7)assigned:由Java程序負責生成標識符,如果在配置文件中不配置<generator></generator>標簽,則默認為
該策略,適用於自然主鍵。
Hibernate實體類編寫規則和主鍵策略