1、新建保存每張表最新主鍵的 主鍵表
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 + "]"; } }
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 (?, ?, ?, ?, ?, ?)