我在理解HQL
查询从哪里获取信息时遇到了一些麻烦。我的项目使用不同的线程,每个线程读取/写入数据库。线程不共享 Session 对象,而是使用一个HibernateUtil
为我创建会话的类。
直到最近,我只会在写作后关闭会话,而不是在阅读后。对对象的更改将立即在数据库中看到,但是在其他线程上读取时(与用于写入的会话对象不同)我会得到陈旧的信息。读取和写入总是发生在不同的线程上,这意味着不同的会话对象和不同的会话缓存。
我一直认为通过使用HQL
而不是Criteria
,我将始终以数据库(或二级缓存)而不是会话缓存为目标,但是在调试我的代码时,我很清楚 HQL 正在会话缓存中寻找对象并检索了一个旧的过时对象。
假设HQL
总是以数据库为目标,我错了吗?或者至少是二级缓存?
PS:我只使用一个SessionFactory
对象。