2011-09-02 189 views
1

我需要使用Hibernate,通過ODBC連接(不是我的決定),並想知道這樣做的注意事項使用Hibernate(如果它甚至有可能?)。我做了一些研究,並且有些困惑,希望有人能澄清一些觀點。好像我需要使用JDBC-ODBC橋接器?通過ODBC連接

Wiki - JDBC/ODBC Bridge

  1. 在該頁面中填充有不同的JDBC 「類型」(1-4)。從我所能理解的情況來看,驅動程序的具體實現細節隨着類型版本而增加?即。類型1 ODBC驅動程序不能支持類型4驅動程序可以使用的相同功能?看起來像一個ODBC驅動程序不能超過1,而JDBC驅動程序(可以)達到4?

  2. 如果目標數據庫中有自己的ODBC驅動程序,需要什麼級別的支持工作?我是否應該查看文檔以查看是否存在級別1,級別N等等?

  3. 對上述問題相似,我怎麼能確保LOB字段都去上班/打破?是否需要在ODBC驅動程序中實現級別或某些SQL函數?

不幸的是,我在理解hibernate所需要的東西方面存在一些斷層,因爲我沒有找到它所需要的文檔。一個解釋和/或文件將是偉大的。

回答

2

1) ODBC沒有像java那樣的'驅動程序類型'。主要的區別(爲什麼Java有驅動程序類型)是一些司機要求其不能跨不同操作系統/架構便攜機擴展。

例如,JDBC驅動程序類型1具有純原生綁定。所以,如果你有使用這個驅動程序在Windows上運行的東西,你不能把你的應用程序和部署到Linux,因爲有二進制不兼容。

JDBC驅動程序類型4是在天平的另一端,它的純Java編寫的,因此它可以可以運行在JVM的任何平臺上運行,而不需要的是翻譯電話服務(這是類型3司機的情況)。

所以1型是純天然的,類型4是純java,在中間不同的色調。

2)您需要檢查數據庫供應商的驅動程序。你能說出你正在使用哪個數據庫嗎?

3) LOB字段「應該」工作,但它也取決於驅動程序,它可能有一些奇怪的限制,例如「驅動程序無法處理大於4k的Lob字段」。

我的設備專業的建議是,你衝誰決定這對由於以下原因堅果的人:

  • 從Oracle網站摘自:的JDBC-ODBC橋驅動程序,建議在原型使用努力並沒有其他技術爲基礎的JDBC驅動程序存在
  • 維基百科情況:相比其他驅動程序類型很慢
  • ,你會發現在其他數據庫廠商W¯¯類似的評論因爲JDBC驅動程序在過去的12(或更多)年已經發展了A LOT
  • 你編寫Java,不VB.Net

並請,不要害怕展示這個人,他/她是錯的(當然,在一個不錯的方式)的。

+0

澄清一點:當您提到「您需要檢查數據庫供應商驅動程序」時。你是說要檢查JDBC驅動程序還是JDBC-ODBC驅動程序?如果JDBC驅動程序支持它,假設事情可以正常工作,儘管通過ODBC橋緩慢而低效地安全嗎? – Ryan

+0

Ups,那部分根本不清楚。我的意思是說一些數據庫供應商提供了優化的Java-ODBC驅動程序。如果你的供應商沒有提供,你可以使用Java的[generic driver](http://download.oracle.com/javase/6/docs/technotes/guides/jdbc/bridge.html)。關於如果一切都能正常工作,我想是的(這是一個假設),你可能會發現很多Hibernate的問題,因爲沒有ODBC或泛型SQL [方言](http://docs.jboss.org/hibernate/core/3.5 /javadoc/org/hibernate/dialect/package-summary.html),所以你需要使用另一種方言(Mysql?),並希望它可以工作 – Augusto

+0

接受的答案:如果你不介意的話,還有一個RFC(larification)。我認爲使用的驅動程序獨立於方言選擇?該驅動程序的細節或多或少地將API設置爲*能*發送SQL語句? – Ryan