比方说,我将当前用户缓存在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