比方說,我將當前用戶緩存在servlet會話(或類似)中,並獲得「獲取當前用戶的所有書籍」之類的請求。天真,我會去在servlet會話中緩存Hibernate實體
hibernateSession
.createCriteria(Book.class)
.add(Restrictions.eq("user", currentUser))
.list();
和工作原理,但在更復雜的情況(我現在不能重現),我得到一個
TransientObjectException: object references an unsaved transient instance
所以我想,我應該重視不知怎的,當前用戶到會話。我試圖
currentUser = (User) session.merge(currentUser);
才發現,它發出數據庫查詢,從而使緩存不超過只存儲ID更好。
這樣的緩存可以有效地完成嗎?
非常感謝,我想這就是我以後的感受。你可以添加一些有關在使用帶有被刪除實體的'load'時發生的災難的信息嗎?這不是我問題的一部分,但是我從來沒有從Hibernate文檔中理解。 – maaartinus