JPA學習筆記(4)——使用Table策略來生成主鍵
阿新 • • 發佈:2019-01-10
在上一篇部落格中,提到一個註解@GeneratedValue,用於標註生成主鍵的策略,其中一種策略就是Table。
注意:這種方法不常用,只有遇到特殊業務需求時才會用到。
關於註解,請參考JPA學習筆記(3)——JPA註解
如何使用Table策略生成主鍵
使用這種策略,需要建立一張表
表名:ID_GENERATOR
欄位名 | 說明 |
---|---|
ID | 本條記錄的ID |
PK_NAME | 主鍵名 |
PK_VALUE | 主鍵值 |
看到這裡,肯定會不明所以。後面會慢慢解釋
往這張表裡面插幾條資料
ID | PK_NAME | PK_VALUE |
---|---|---|
1 | CUSTOMER_ID | 1 |
2 | STUDENT_ID | 10 |
3 | ORDER_ID | 100 |
PK_NAME 中,CUSTOMER_ID 表示為CUSTOMER這張表生成ID,它的值為PK_VALUE=1,這個值並不代表CUSTOMER的ID就是1,而是通過一種演算法來自動生成ID,而這個演算法跟這個PK_VALUE有關。
相同的,STUDENT_ID表示為STUDENT表生成ID,值為10
那麼JPA怎麼知道要根據這張表來為其他三張表生成ID呢?
根據橫縱座標來定位到PK_VALUE
使用註解來告訴JPA橫縱座標
package com.jpa.helloworld;import javax.persistence.Column;import javax.persistence.Entity;import javax.persistence.GeneratedValue;import javax.persistence.GenerationType;import javax.persistence.Id;import javax.persistence.JoinColumn;import javax.persistence.ManyToOne;import javax.persistence.Table;import javax.persistence.TableGenerator;@Table(name="T_ORDER")@Entitypublic class Order { @Column(name="ID") @TableGenerator(name="ID_GENERATOR", //生成器名稱 table="ID_GENERATOR", //生成器使用的表 pkColumnName="PK_NAME", //表中對應的欄位名 pkColumnValue="ORDER_ID", //上述欄位的值 valueColumnName="PK_VALUE", //值 //根據上述三個屬性,就可以定位到表中的PK_VALUE的值,如:1,10,100 allocationSize=10)//表示主鍵一次增加10 @GeneratedValue(strategy=GenerationType.TABLE, generator="ID_GENERATOR")//這裡的生成器和上面的生成器名稱對應 @Id private Integer id; @Column(name="ORDER_NAME") private String orderName; @JoinColumn(name="USER_ID") @ManyToOne private User user; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getOrderName() { return orderName; } public void setOrderName(String orderName) { this.orderName = orderName; } public User getUser() { return user; } public void setUser(User user) { this.user = user; } @Override public String toString() { return "Order [id=" + id + ", orderName=" + orderName + ", user=" + user + "]"; }}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
每次ORDER表增加的記錄,主鍵增加10,如此同時,ID_GENERATOR這張表中,對應的PK_VALUE的值會增加1。但是這個值我們不需要去理會。
到了這一步,就全部完成
再分享一下我老師大神的人工智慧教程吧。零基礎!通俗易懂!風趣幽默!還帶黃段子!希望你也加入到我們人工智慧的隊伍中來!https://blog.csdn.net/jiangjunshow