2010-12-20 43 views
1

我正在輔導一個使用hibernate作爲持久層的學生項目。從我在工作中的項目中,我已經非常熟悉hibernate,並且可以在很少的'麻煩'下使用它。但是在這個項目中,我們經常遇到會話,陳舊的對象和'對象從不同的會話中加載'的錯誤 - 錯誤。最簡單的使用休眠會話的方式

所以我要尋找使用會話的最簡單的方式:

理想的情況是:

  • 會話可以從任何地方
  • 中獲取它不應該的問題是否進行了給定的對象加載會話A,然後用會話B更新

它是一個單進程的GUI應用程序。 current_session_context_class的當前設置是線程。但我使用會話變量的靜態字段(我認爲這會導致我的一些麻煩)並且只能讀取它一次。

感謝您的協助!

乾杯, 雷託

回答

2

假設你不教ORM的理解爲什麼這些錯誤的發生是沒有知識的一部分,學生們應該來逃脫等等等等,並等你剛纔希望Hibernate能夠像數據庫封裝一樣工作,這樣他們就可以在學習其他東西的同時獲取數據。

這可能是你最好的選擇:

StatelessSession session = sessionFactory.openStatelessSession(); 

無狀態會話實際上是「爲ORM自動提交模式」,並儘可能接近原始的JDBC包裝爲休眠得到。沒有會話,沒有L1緩存,沒有持久性上下文。只是返回對象的SQL/HQL。

+0

到你的問題:yap多數民衆贊成的目標。他們很早就接觸到這些概念。但無論如何,它有點讓人難過,因爲hibernate有1001個方法可以完成任務,並且文檔沒有更清晰地顯示這些改進步驟(以及它們的限制和要求)。我發現無狀態會話和完全容器管理的事務提供者之間有很大的差距。等等:)但仍然,對於簡單的事情感覺太複雜了。無論如何,謝謝你的提示! – reto 2010-12-21 00:19:15