查询Hibernate缓存

use*_*745 7 java hibernate hibernate-cache

我有以下代码:

Person a = new Person();
a.setName("John");

Session session = openHibernateSession();

session.beginTransaction();

session.saveOrUpdate(a);

Criteria critera = session.createCriteria(Person.class);
critera.add(Restrictions.eq("name","John"));
Person personFromCache = (Person) criteria.uniqueResult();

...

session.commit();
Run Code Online (Sandbox Code Playgroud)

我想要的是能够从数据库和Hibernate的缓存中搜索对象.以下示例在调用时返回null uniqueResult.有没有办法检索尚未提交到数据库的已保存对象?

Rai*_*lam 1

如果您搜索的不是 ID,那么 Hibernate 将不会使用一级缓存。Hibernate get 和 load 默认与一级缓存相关,但 criteria 查询则不然。对于你的情况,我这边有两种解决方案

  1. 通过刷新会话 = 只需像这样刷新会话session.flush();,同时会话中的数据将同步到数据库,因此将生成 Id,结果 Criteria 查询将在数据库中找到结果并将结果列表给您。

  2. 启用hibernate二级缓存 = 您可以通过hibernate缓存提供程序(如ehCache)启用二级缓存并应用该技巧。