簡體   English   中英

hibernate會話范圍錯誤

[英]hibernate session scope error

我正在使用grails web-app

該應用程序在一個非常慢的網絡上運行,並且正在運行IE 6的舊的和慢速的客戶端PC訪問。數據庫連接非常慢並且數據庫已經過度工作。 因此,最小化db調用和來回傳遞的數據是一個優先事項

我知道使用會話范圍不是最佳做法。 在這種情況下,我認為這將是最好的。 考慮到我的所有頁面都需要相同的對象集,這將使它們多次被取出

所以我將我的對象放在會話范圍session.obj = obj

它可以解決一個問題因為系統很慢,所以可以在網頁鏈接(控制器/動作)上多次點擊。

當發生這種情況時,我在某些情況下得到錯誤org.hibernate.HibernateException:非法嘗試將集合與兩個打開的會話相關聯

此代碼發生錯誤

if (!obj?.isAttached()) {
   obj?.attach()
}

我必須將對象附加回hibernate會話,所以我可以延遲加載相關的對象,我不想急於獲取(可能是一個解決方案)我似乎錯誤是因為當對象被多次連接時。 這個條件似乎沒有阻止這個問題。 這是競爭條件嗎?

我只是想知道是否有人解決這個問題或知道原因

謝謝

如果你想避免往返數據庫並仍然以安全的方式編碼,而不必處理與Hibernate會話之間的連接/分離對象,你應該做的是使用Hibernate二級緩存。 這將允許透明地緩存經常使用的實體,它們的關聯,甚至經常執行的查詢的結果。

緩存也會更高效並使用更少的內存,因為它將在所有用戶會話中共享。 當然,它會更安全,因為您在HTTP會話中不會有過時的實體。

絕對是走的路,IMO。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM