Java 查询Hibernate缓存
我有以下代码:Java 查询Hibernate缓存,java,hibernate,hibernate-cache,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 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();
我想要的是能够从数据库和Hibernate的缓存中搜索对象。以下示例在调用
uniqueResult
时返回null。有没有办法检索尚未提交到数据库的已保存对象?如果搜索的不是ID,则Hibernate将不使用一级缓存。默认情况下,Hibernate get and load与一级缓存相关,但条件查询不相关。在你的情况下,我这边有两个解决方案
session.flush()代码>执行此操作时,来自会话的数据将同步到数据库,因此将生成Id,并且作为结果条件查询将在数据库中找到结果,并将结果列表发送给您
您可以使用无状态会话,但需要注意:
这些实体不绑定到任何会话,如果您想解析关系或惰性字段,则会出现异常 除了使用TestNg测试框架之外,我们还做了一些类似的事情。几个答案讨论了session.flush()方法调用。这是正确的。对flush的调用告诉Hibernate做几件事,包括确保当前在队列中等待的所有数据库调用都已执行并从队列中清除。即使您根据用户名进行选择,它也会返回数据。它没有返回null
session.beginTransaction();
session.saveOrUpdate(a);
session.flush();
Criteria critera = session.createCriteria(Person.class);
critera.add(Restrictions.eq("name","John"));
Person personFromCache = (Person) criteria.uniqueResult();