JPA使用GenerationType.TABLE生成主鍵


1、新建保存每張表最新主鍵的 主鍵表

clipboard

 

2、修改實體類上的主鍵生成策略

//進行映射的表的名稱
@Entity
public class Customer {

    private Integer id;
    private String lastName;

    private String email;
    private int age;
    private Date createdTime;
    private Date birth;
    
    

    //生成主鍵的方式
    @TableGenerator(name="ID_GENERATOR", //name 屬性表示該主鍵生成策略的名稱,它被引用在@GeneratedValue中設置的generator 值中
            table="JPA_ID_GENERATOR",//table 屬性表示表生成策略所持久化的表名
            pkColumnName="PK_NAME",//表示在持久化表中,該主鍵生成策略所對應鍵值的名稱
            pkColumnValue="CUSTOMER_ID", // CUSTOMER_ID 對應的 PK_VALUE存儲的就是 Customer表最新的一條數據的主鍵
            valueColumnName="PK_VALUE",//持久化表中,該主鍵當前所生成的值,它的值將會隨着每次創建累加
            allocationSize=50)
    /*@GeneratedValue(strategy=GenerationType.AUTO)*/
    @Id
    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    @Column(name="LAST_NAME",length=255,nullable=false)
    public String getLastName() {
        return lastName;
    }

    public void setLastName(String lastName) {
        this.lastName = lastName;
    }

    @Column(name="EMAIL",length=50,nullable=false)
    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    @Column(name="AGE")
    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    // 創建時間精確到時間戳
    @Column(name="CREATED_TIME")
    @Temporal(TemporalType.TIMESTAMP)
    public Date getCreatedTime() {
        return createdTime;
    }

    public void setCreatedTime(Date createdTime) {
        this.createdTime = createdTime;
    }

    //生日則精確到天
    @Column(name="BIRTH")
    @Temporal(TemporalType.DATE)
    public Date getBirth() {
        return birth;
    }

    public void setBirth(Date birth) {
        this.birth = birth;
    }

    @Override
    public String toString() {
        return "Customer [id=" + id + ", lastName=" + lastName + ", email=" + email + ", age=" + age + ", createdTime="
                + createdTime + ", birth=" + birth + "]";
    }
    
    
}

 

clipboard

 

3、測試

1) 查看控制台打印

//每次向業務表插入數據時,去主鍵表查詢該業務表的主鍵
Hibernate: 
    select
        PK_VALUE 
    from
        JPA_ID_GENERATOR 
    where
        PK_NAME = 'CUSTOMER_ID' for update  
          
Hibernate: 
    insert 
    into
        JPA_ID_GENERATOR
        (PK_NAME, PK_VALUE) 
    values
        ('CUSTOMER_ID', ?)
Hibernate: 
    update
        JPA_ID_GENERATOR 
    set
        PK_VALUE = ? 
    where
        PK_VALUE = ? 
        and PK_NAME = 'CUSTOMER_ID'
Hibernate: 
    insert 
    into
        Customer
        (AGE, BIRTH, CREATED_TIME, EMAIL, LAST_NAME, id) 
    values
        (?, ?, ?, ?, ?, ?)

 

clipboard


免責聲明!

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



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