2015-04-01 69 views
0

我正在研究當前支持MSSQL和MYSQL的應用程序,現在我們需要使它與Oracle和Postgresql兼容。由於我們使用相同的Id爲記錄生成一些邏輯標識符,因此我們對爲記錄生成的Id有很強的依賴性。因此,我們希望每個表都具有自己的序列,以便每個新記錄都有一個新的邏輯標識符是序列n,n + 1,n + 2,因此邏輯標識符將是XYn,XY(n + 1),XY(n + 2)。多個數據庫支持使用休眠

對於Id使用生成策略AUTO可以同時使用MSSQL和MYSQL,但不能與Oracle或Postgresql一起使用,因爲生成策略AUTO最終會映射到這些數據庫的SEQUENCE。我需要爲所有這些數據庫維護一個通用代碼,並且不能進行任何數據庫更改。 請建議一些方法來完成此項工作。

+0

我記得有可能在POSTGRE中創建序列並將其用於適合您的ID生成。你檢查了@Generated的文檔嗎? – Antoniossss 2015-04-01 07:43:41

+1

SEQUENCES有什麼問題? – ibre5041 2015-04-01 08:16:10

+0

從我所知道的一個序列被數據庫中的所有表共享。我所說的邏輯標識符必須爲多個表維護,因此每個表都需要一個自己的序列。在Oracle中, – Sushant 2015-04-01 09:03:57

回答

0

爲什麼不使用UUID而不是序號?這更便攜。

在Java中,已經有UUID的實現。

據我記憶,Oracle沒有內置的順序機制,所以你不能使用Hibernate的ID生成器。

+0

我們無法爲ID使用UUID的原因是我在自己的問題中提到的依賴關係。每個記錄使用的邏輯標識符是使用ID生成的,並且UUID不提供用戶可以涉及的ID,即生成的ID是隨機的。 – Sushant 2015-04-01 08:02:44

1

如果您想要在每個RDBMS中進行移植,那麼GenerationStrategy=TABLE是一個解決方案。檢查一些信息this article

+0

Upvote,因爲沒有提到性能限制,這基本上是讓休眠完成所有工作的唯一方法。 – Gimby 2015-04-01 08:05:40

+0

正是我所擔心的,保持共同的代碼是需求,但性能更爲重要。性能是應用程序的USP,我不能讓性能受到影響只能容納另一個數據庫 – Sushant 2015-04-01 09:06:16

+0

除非您將開發自己的解決方案作爲JPA的一部分,否則您將不得不爲每個RDBMS部署應用程序版本,或者至少需要專門的DAO模塊滿足您的需求。 – Antoniossss 2015-04-01 09:08:08