我知道的事情: 休眠一级缓存是自动启用的,并且是特定于会话的。
我有这堂课,我只是想检查一级缓存是否正常工作。
@Repository
@Transactional
public class StudentDaoImpl implements ServiceDao {
/**
* The EntityManager invokes
* the hibernate session under the hood.
*/
@Autowired
private EntityManager entityManager;
public <T> List<T> fetchAll(Class<T> type) {
// entityManager.unwrap creates a new Session if it does not exist
Session session = entityManager.unwrap(Session.class);
CriteriaBuilder builder = session.getCriteriaBuilder();
CriteriaQuery<T> query = builder.createQuery(type);
// getting All data from Table
query.from(type);
List<T> list = session.createQuery(query).getResultList(); // 1st query gets fired
List<T> list1 = session.createQuery(query).getResultList(); // 2nd query gets fired
return list;
}
我原以为只有一个查询会被触发,但是即使我们处于同一个会话中(如果不是错误的话),也会有2个查询被触发
答案 0 :(得分:0)
会话缓存按ID缓存实体。如果使用相同的ID两次调用 Parameters:
loadOnStartup - the initialization priority of the Servlet
Throws:
IllegalStateException - if the ServletContext from which this ServletRegistration was obtained has already been initialized
,将仅执行1个查询。
只能使用查询缓存来完成查询的缓存。否则,执行查询将始终...执行查询。
请注意,JPA API允许创建条件查询而无需展开会话。