您好,登錄后才能下訂單哦!
這篇“Jspxcms主鍵生成機制是什么”文章的知識點大部分人都不太理解,所以小編給大家總結了以下內容,內容詳細,步驟清晰,具有一定的借鑒價值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來看看這篇“Jspxcms主鍵生成機制是什么”文章吧。
數據庫主鍵生成策略通常有
自增主鍵。依賴數據庫的功能,mysql、sqlserver有主鍵自增功能,oracle、db2則沒有。
數據庫序列。依賴數據庫的功能,mysql沒有序列。
UUID。不依賴數據庫。通過程序產生一個32位的不重復的字符串。由于字符串過于長,作為主鍵容易影響數據庫性能。
Table策略。使用一個單獨的數據庫表來記錄其他其他表的主鍵值,模仿數據庫序列的功能。
其中Table策略通用性好,在任何數據庫下都可以通用。在Jspxcms中,這張表的名稱:hibernate_sequences(7.0及之前版本為t_id_table)。里面分別記錄了表名及其相應的ID值。
代碼中的domain實體類中有ID生成方式的注解。以com.jspxcms.core.domain.Info為例:
@Id @Column(name = "f_info_id", unique = true, nullable = false) @TableGenerator(name = "tg_cms_info", pkColumnValue = "cms_info", initialValue = 1, allocationSize = 10) @GeneratedValue(strategy = GenerationType.TABLE, generator = "tg_cms_info") public Integer getId() { return this.id; }
其中initialValue是主鍵的起始值,allocationSize是JPA一次獲取ID的數量。由于獲取ID需要消耗性能,所以不會插入一條數據就獲取一個ID,而是一次性獲取10個、50個、100個,甚至更多。這會導致ID不連續,比如一次獲取10個ID后,只用了一兩個,程序就重啟了,那剩下的八九個ID就作廢了。
如果第三方程序要插入數據到這些表中,就要非常注意ID的問題。需要自行修改hibernate_sequences表中的ID值,否則會導致主鍵沖突的異常。
需要特別注意的是,hibernate_sequences中的next_val(ID值)是實際使用ID+2*allocationSize,比如當前使用的ID值是100,allocationSize是10,那么ID表中的next_val好像應該110,但實際上是120。
自己修改hibernate_sequences的next_val時需要特別小心,看到next_val為100時,可以使用101作為自己的ID,但應該把next_val改到一個更大值,不是改成102,也不是110,而是要改成120(allocationSize為10的情況下)。而allocationSize默認的值是50,在需要大量插入數據的情況下,程序還會把這個值設置的更大。所以不要怕浪費ID值,把next_val改大一點總是安全的。
以上就是關于“Jspxcms主鍵生成機制是什么”這篇文章的內容,相信大家都有了一定的了解,希望小編分享的內容對大家有幫助,若想了解更多相關的知識內容,請關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。