这是我的员工类
@Entity
@Cacheable
@Cache(usage=CacheConcurrencyStrategy.READ_WRITE)
public class Employee {
// fields
}
Hibernate cfg文件是
<property name="cache.use_query_cache">true</property>
<property name="hibernate.cache.provider_class">org.hibernate.cache.EhCacheProvider</property>
在我的测试课程中: -
首先我要通过查询更新员工1
Query employeeUpdateQuery=session.createQuery("update Employee set employeeName=:employeeName where employeeId=1");
employeeUpdateQuery.setCacheable(true);
employeeUpdateQuery.setParameter("employeeName", "Employee 1.2");
employeeUpdateQuery.executeUpdate(); // line 1
然后我通过查询获得员工1
employeeQuery=session.createQuery("from Employee where employeeId=1");
employeeQuery.setCacheable(true);
employee1=(Employee)employeeQuery.uniqueResult();// Query got fired. line 2
我的问题是,当我使用带有READ_WRITE的查询缓存时,为什么在第1行触发了查询。 不应该在第1行更新查询缓存,并且应该从第2行的查询缓存中获取结果而不是命中 db query?