2
JPA承諾對持久性和數據庫的供應商中立。但是我已經知道,像hibernate這樣的持久性框架並不完美(字符編碼,空比較),並且您需要爲每個數據庫調整架構。因爲有兩層(持久性框架和數據庫),我想他們有些工作使用一些JPA代碼...JPA和持久性提供程序和數據庫供應商的兼容性
有沒有人有一些多支持的經驗,如果是的話,有什麼技巧和避免這種不兼容的建議?
JPA承諾對持久性和數據庫的供應商中立。但是我已經知道,像hibernate這樣的持久性框架並不完美(字符編碼,空比較),並且您需要爲每個數據庫調整架構。因爲有兩層(持久性框架和數據庫),我想他們有些工作使用一些JPA代碼...JPA和持久性提供程序和數據庫供應商的兼容性
有沒有人有一些多支持的經驗,如果是的話,有什麼技巧和避免這種不兼容的建議?
在JPA級別上,您唯一能做的就是使用當前使用的持久性庫的JPA API(即在使用hibernate時,不要使用Hibernate.initialize())。
在數據庫層面,最好的辦法是保持簡單,因爲隨着您離開最常見的使用案例,行爲差異的機會會增加。具體來說,這可能意味着不使用組合主鍵,不存儲二進制數據,根本不使用SQL執行......我相信其他人會有更多的實踐例子,這些實踐將允許您輕鬆地從一個數據庫移動到另一個數據庫。
上面的代碼使我可以在PostgreSQL和Oracle之間切換一個應用程序,以及PostgreSQL和MySQL的幾個「方言」(在休眠方式中)之間切換。
任何具體的例子(因爲AFAIK,字符編碼可以指定爲屬性或在連接url)?還要注意,針對不同的數據庫使用不同的模式似乎對我來說是「正常的」(因爲Oracle使用序列,MySQL自動增量字段等,所以如果您想要利用它們,最好的方法是讓JPA提供程序爲每個數據庫生成DDL )。 – 2010-05-02 23:49:57