2016-07-11 87 views
-1

我是java的新手,正在閱讀關於對象關係映射。我發現這個鏈接Hibernate什麼是對象/關係不匹配

上的一個術語對象/關係不匹配誰能解釋一下什麼是Java方面的對象/關係不匹配。 我也從haacked.com瞭解它,但不能正確得到它。與示例的解釋將是可觀的。

+0

[什麼是對象關係映射框架?]可能重複(http://stackoverflow.com/questions/1152299/what-is-an-object-relational-mapping-framework) –

+0

不是它的重複在那個問題中沒有人討論過關於對象關係不匹配的問題。我從那裏本身讀對象關係映射,但是我對對象關係不匹配感到困惑,這是沒有人討論過的。 –

回答

3

Hibernate是一個ORM(對象關係映射)工具。它的主要目的是將面向對象編程的概念(如類,繼承和字段)轉換爲關係數據庫(如表,行和列)中使用的概念。

例如,一類對應於一個數據庫表,一個對象(一個類的實例)對應於數據庫行,和一個字段對應於數據庫列。

術語「對象/關係的不匹配」是指這樣的事實,沒有從面向對象編程的所有概念轉換爲關係數據庫概念,反之亦然一條明路。 Hibernate試圖解決這個問題。

例如,如何將繼承轉換爲關係數據庫概念?在關係數據庫中不存在繼承關係,因此必須發明一些方法來在數據庫中表示這一點。 Hibernate有不同的方式來做到這一點,例如,通過爲具有鑑別器列的類層次結構的一個表確定行映射到哪個子類,或者通過每個子類具有一個表。

同樣,存在於關係數據庫中的概念不易被翻譯成面向對象的編程概念。

+0

這不完全正確。表格和類別不按照您暗示的方式映射1:1。對象組合說,單個對象可以要求多個表的JOIN來表示1:m和m:n的關係。關係是基於集合的;對象不是。 – duffymo

-1

ORM解決方案,儘量做到有可能面向對象的程序員忘記自己正在使用的關係型數據庫,只有在物體處理。

從面向對象的語言和SQL的區別開始。 OO語言是程序性的; SQL是聲明式的。

對象是的封裝狀態和行爲在一起成爲單個軟件組件的類的實例。關係數據庫表達了遵循集合論的實體之間的關係。

對象可以使用繼承和組合。表可以連接在一起。

我沒看過Hibernate的文章,但這些將是三,我能想到的主要區別。看看這些文章的寫作方式是否與你產生共鳴。