JPA Hibernate 使用UUID做為主鍵的問題


1.將數據庫中的主鍵,設置為varchar(32)。

2.在entity中類頭部寫入@GenericGenerator(name = "jpa-uuid", strategy = "uuid")

3.在entity中id主鍵頂部寫入@GeneratedValue(generator = "jpa-uuid"),注意generator中的值必須與注釋@GenericGenerator中name屬性完全一致。

4.設置entity中主鍵ID為string類型。設置長度為32

5.GenericGenerator是Hibernate中的注釋,有兩個參數。name是system-uuid“” ,策略strategy是uuid 。

6.@GenericGenerator支持13種策略,分別是:

static {  
  GENERATORS.put("uuid", UUIDHexGenerator.class); GENERATORS.put("hilo", TableHiLoGenerator.class); GENERATORS.put("assigned", Assigned.class); GENERATORS.put("identity", IdentityGenerator.class); GENERATORS.put("select", SelectGenerator.class); GENERATORS.put("sequence", SequenceGenerator.class); GENERATORS.put("seqhilo", SequenceHiLoGenerator.class); GENERATORS.put("increment", IncrementGenerator.class); GENERATORS.put("foreign", ForeignGenerator.class); GENERATORS.put("guid", GUIDGenerator.class); GENERATORS.put("uuid.hex", UUIDHexGenerator.class); //uuid.hex is deprecated GENERATORS.put("sequence-identity", SequenceIdentityGenerator.class); } 
上面的12種策略,再加上native,一共是13種。
7.@GeneratedValue注解屬於一個JPA接口(從JAVA EE 5開始,存在於javax.persistence包下),其接口下包含了兩個抽象的參數,GenerationType類型的strategy和String類型的generator,並且兩個參數都有相應的默認值。 

8.GenerationType同樣也位於javax.persistence包下,並且還繼承了Enum枚舉類,然后其中有4個值供我們使用,分別是: 
TABLE:使用一個特定的數據庫表格來保存主鍵。 
SEQUENCE:根據底層數據庫的序列來生成主鍵,條件是數據庫支持序列。 這個值要與generator一起使用,generator 指定生成主鍵使用的生成器(可能是orcale中自己編寫的序列)。 
IDENTITY:主鍵由數據庫自動生成(主要是支持自動增長的數據庫,如mysql) 
AUTO:主鍵由程序控制,也是GenerationType的默認值。

9.兩個數據庫對GenerationType的支持

mysql 
GenerationType.TABLE 
GenerationType.AUTO 
GenerationType.IDENTITY 
不支持GenerationType.SEQUENCE

oracle 
strategy=GenerationType.AUTO 
GenerationType.SEQUENCE 
GenerationType.TABLE 
不支持GenerationType.IDENTITY


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM