2010-03-30 75 views
1

我一直在尋找一種替代Hibernate的各種原因。我遇到了Liquibase,我喜歡這個想法,所以我願意嘗試。 Liquibase將以獨立於SQL的方式迎合數據庫的創建/修改。我的主要問題是我的應用程序中的代碼如何執行SQL語句而不依賴於數據庫?還有其他一些項目像猶太人方言類嗎?Java SQL數據庫獨立性

感謝,

保羅

+1

不好意思,但Liquibase似乎是數據庫的「版本控制」工具,而不是數據庫訪問庫。所以你的問題沒有意義。恕我直言。 – 2010-03-30 11:08:53

+0

什麼部分沒有意義?我正在討論數據庫獨立性的解決方案,Liquibase是用於創建/修改或「版本控制」的。 – Paul 2010-03-30 12:13:17

+0

稍後您將討論您的應用程序,並執行SQL語句(不是說「僅DDL」)。再比較LB和Hib。這就是所有混亂髮展的地方。 – 2010-03-30 23:17:44

回答

1

我的主要問題是我的代碼在我的應用程序中如何執行SQL語句而不依賴於數據庫?

那麼,真正實現這一目標的唯一方法是使用更高級別的查詢語言,而不是將SQL轉換爲數據庫特定的SQL。我們已經有一些(專有的,標準的)DSL:Toplink QL,EJB-QL,JDO QL,HQL,JPQL等等。我的建議是挑選你的毒藥(但請不要推出你自己的解決方案)。

1

一個使用SQL的問題是,它是依賴於供應商。我不認爲有什麼方法可以避免使用某些第三方庫或框架(如Hibernate!)。

但是,如果你確實使用SQL,我強烈建議你看看Ibatis

+0

我看過並使用了ibatis。我沒看到這對我的問題有什麼幫助。我錯過了什麼嗎? – Paul 2010-03-30 12:11:33

1

我懷疑它 - hibernate中的方言用於將對象和HQL查詢轉換爲正確的本地查詢。

如果您想要使用普通的SQL查詢,那麼您應該將SQL查詢轉換爲.. SQL查詢。

實現數據庫獨立性的一種方法是僅使用ANSI SQL。但即使這樣也不能保證數據庫完全獨立。

我建議如果你想使用正常liquibase過程中,你可以在外面liquibase的SQL生成類與Hibernate和HQL(JPA-QL)

+0

堅持ANSI SQL也意味着你可以做的事情非常有限,因爲有許多事情不在標準的範圍之內。 (特別是如果只支持舊版本的規格。) – 2010-03-30 19:16:41

1

堅持。特別是在2.0中,sql生成類已經得到了改進和抽象,但取決於您想要運行的是什麼,它可能無法滿足您的需求。由於liquibase是關於數據庫遷移的,因此大多數與數據庫無關的邏輯圍繞着DDL語句(創建表/添加列等),而不是圍繞插入/更新/刪除語句。不知道你將運行什麼類型的語句,我會假設你更關心跨數據庫插入/更新/刪除語句,在這種情況下,你會更好地服務於Hibernate/ibatis /等。