2009-08-21 41 views
0

我在Hibernate中有一個非常好奇的問題,我想提出一些意見。在我的代碼,如果我做到以下幾點:休眠異常通過Alt + Tab修復

  • 轉到頁一
  • 點擊網頁A上的鏈接將要採取的網頁B
  • 點擊數據項目第B
  • 拋出異常

我得到一個錯誤,告訴我:

failed to lazily initialize a collection of role: XYZ, no session or session was closed 

輝夠了。但是,當我做同樣的事情,但在中間添加一個ALT +標籤,一切都很好。例如。

  • 轉到頁一
  • 點擊網頁A上的鏈接將要採取的網頁B
  • 按下Alt + Tab切換到另一個應用程序
  • 按下Alt + Tab切換回web瀏覽器
  • 點擊頁面B上的數據項目
  • 一切都很好。

我有點困惑,關於如何從我的應用程序切換焦點使其按照我的意圖行事。有沒有人有任何光線照耀這個問題?我不認爲這是一個鎖定問題,因爲即使我比第一組更快地完成第二組步驟,仍然沒有錯誤。

這是一個Seam應用程序使用Hibernate 3.3.2.GA & 3.4.0.GA.

+0

據我所知,聚焦沒有任何改變。我唯一改變的是將下列內容添加到頁面上的表中: 最後登錄日期 的 而且調用的函數只對我以前使用過的DB進行過定期查詢 – 2009-08-21 15:37:59

回答

0

這與切換應用程序沒有什麼關係。也許你的瀏覽器在焦點丟失/獲得時更新了一些東西

原因您的問題是這樣的:

  1. 在第一個請求,你裝​​載對象和存儲在會話中。該對象包含某種類型的集合。

  2. 在接下來的請求中,您嘗試對收集進行一些操作,但您忘記先致電session.refresh(object)

會發生什麼情況是會話在第一個請求完成時自動關閉。但是對象中的備份集合仍然包含對它的引用(以便它可以在第一次訪問時自動加載)。

0

你使用的是JavaScript嗎?當您切換回瀏覽器以某種方式清除不良狀態時,也許事件正在觸發?

0

您的頁面是否完成渲染?我發現有時當我得到錯誤時,而不是顯示錯誤,服務器只是退出生產輸出。它會將錯誤輸出到日誌中,但那是關於它的。我結束了一半的完成頁面。查看源代碼並查看是否到達主體的末端,或許您的切換導致服務器變得懶惰,或者您的瀏覽器在出現錯誤時提前終止連接

0

我的建議是進行單元測試以查看如果你可以在瀏覽器中隔離其他環境中重現錯誤;)