1. 程式人生 > >JPA學習筆記(4)——使用Table策略來生成主鍵

JPA學習筆記(4)——使用Table策略來生成主鍵

                       

在上一篇部落格中,提到一個註解@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