2011-07-08 59 views
0

我使用代碼發現here爲Seam EntityQuery的Ajax有序/分頁支持。代碼本身運行良好,並且我能夠通過各種參數排序我的數據,沒有任何問題。實體本身不是SQL表,而是映射到JPA(Hibernate)實體的SQL視圖。這也似乎沒有問題,只要我堅持SELECT語句而不嘗試執行INSERT或UPDATE。我的後端數據庫是PostgreSQL 8.4,而且我還沒有實現任何條件觸發器來支持VIEW更新。沒有事務的Seam EntityQuery?

我使用EntityQuery.next()或EntityQuery.previous()方法從一頁結果轉到另一頁時遇到問題。看起來整個頁面請求都被包裝在一個事務中,當我點擊我的下一個按鈕時,它會嘗試對我的Entity對象執行UPDATE。我在我的EntityQuery中重寫了next()方法,並且該操作成功完成。但是,在它完成之後並立即在呈現視圖之前立即發生嘗試的UPDATE。由於我的實體對象不能在後端數據庫上更新(因爲它是一個VIEW),所以我得到一個拋出的異常。

有沒有什麼辦法可以防止在使用這個EntityQuery時打開一個事務?我試着用@ReadOnly註釋我的實體對象。這沒有用。我試過把@Transactional(從不)添加到我的EntityQuery中。這沒有用。任何其他想法?

回答

0

嘗試更改組件上的會話作用域。這樣seam就會從內存中加載對象,而不是擊中數據庫。

@Scope(ScopeType.SESSION) 
相關問題