2014-04-22 58 views
0

我使用Hibernate來管理數據庫表,一切正常。是否可以在沒有Hibernate的情況下訪問Hibernate託管數據庫?

現在,另一個系統應該訪問相同的數據庫表,我不能告訴它使用Hibernate(因爲它是一個單片軟件)。 我的疑問是關於從外部軟件正確使用數據庫以及這種方法給我的注意力帶來的一致性問題。特別是,它能成爲一個問題嗎?也許Hibernate在RAM中工作(一個ORM可以實現緩存和延遲事務來加速寫/讀過程),所以一個可能的外部事務到數據庫可能會導致Hibernate工作的不一致。這是Hibernate的情況嗎?

謝謝

+3

首先搜索Google - 您會發現Hibernate不是** DB管理工具,而是ORM層。 也就是說它不會**阻止其他人訪問數據庫 –

回答

1

正如其他答案指出的那樣,數據庫並不重要。但是,您的申請完全是另一回事。
默認情況下,Hibernate不能很好地處理其控制之外的數據更改。更具體地說,它傾向於完全忽略這種變化。
因此,應用程序加載的數據很可能會與數據庫本身知道的數據不同步,從而導致所有類型的問題。
這是因爲Hibernate緩存數據和大量數據,並且傾向於在該緩存上運行而不是實際數據以提高性能,只有在事務提交時才與數據庫同步。如果別的東西改變了數據,Hibernate會很樂意忽略這些改變並覆蓋其他進程所做的任何事情,甚至不會給你一個警告。

+0

嗨jwenting,謝謝你的迴應。 我使用Spring的JpaTransactionManager來管理事務。這可能是持久性問題嗎? – gvdm

+0

@gvdm問題在於JPA(Hibernate實現)處理緩存的方式。一旦有什麼東西在緩存中,它只是假定始終與數據庫同步。只有解決這個問題的方法是配置JPA/Hibernate不使用緩存。這當然會影響性能,但是如果RDBMS有多種改變途徑,這是唯一的方法。 – jwenting

+0

所以我應該尋找禁用Hibernate緩存的方法,對吧? – gvdm

0

它不應該。你最好做一些整合測試。

  1. 數據庫有另一層一致性保證。
  2. Hibernate應該正確處理它的緩存。
1

你如何訪問數據庫(通過ORM,JDBC或其他連接器)絕對無關緊要,唯一重要的是你的數據庫將如何處理不同系統的多個連接(所以你可能會想看看像Transaction isolation這樣的東西)。

+1

是和否。許多ORM工具默認緩存大量數據以加快訪問速度,導致衝突在應用程序級別被忽視,直到出現約束違規嘗試寫入內容時爲止。 – jwenting

+0

是的,你是對的,你的答案肯定是更好:) –

相關問題