2012-11-28 88 views
1

我有一個應用程序正確地使用JPA-Hibernate與MySQL。在這種情況下,我正在使用實體中的id代自動策略。 另一方面,我有其他使用Oracle的應用程序,並且我正在爲此使用序列策略。 關鍵是我想知道是否有可能爲Oracle/MySQL/Sql Server使用「通用」策略,並使我的應用程序更具可移植性。JPA id生成通用策略

謝謝。

回答

4

便攜式解決方案的簡單方法是使用TableGenerator。值在數據庫表中進行管理,並通過SQL查詢進行檢索和處理,因此不使用數據庫供應商特定的構造。

0

不依賴特定DB功能的通用策略需要額外的表生成ID。這樣的策略:hilo,enhanced-table。您也可以使用基於UUID生成的策略,例如uuid.hex,uuid,uuid2。其他策略會使用不同的DB特定功能,因此可能會在行爲上有所不同。例如native對於MySQL和Postgres的工作方式不同,在保存對象時插入正確的MySQL(生成器)中,Postgres(序列)只會在常規刷新時插入。您可能需要查看DefaultIdentifierGeneratorFactory的來源以查看所有可能的策略並探索其算法和文檔。

注意,一般來說,讓2個或更多的異構應用程序使用同一個數據庫工作是一個好主意,特別是如果他們都寫入數據庫。你的數據庫將很難維護和重構。

+0

我不認爲這是關於使兩個應用程序使用相同的數據庫。據我瞭解OP的問題,他希望可移植性。 – David