使用hibernate的查询缓存

运行下面代码:

String jpql = "FROM User u WHERE u.id = ?";
Query query = entityManager.createQuery(jpql);
query.setParameter(1, 1);
User user = (User) query.getSingleResult();


query = entityManager.createQuery(jpql);
query.setParameter(1, 1);
user = (User) query.getSingleResult();

非常显然会运行两次查询

这里写图片描写叙述

假设想要使用缓存,仅仅查询一次。能够使用setHint

String jpql = "FROM User u WHERE u.id = ?";
Query query = entityManager.createQuery(jpql).setHint(QueryHints.HINT_CACHEABLE, true);
query.setParameter(1, 1);
User user = (User) query.getSingleResult();


query = entityManager.createQuery(jpql).setHint(QueryHints.HINT_CACHEABLE, true);
query.setParameter(1, 1);
user = (User) query.getSingleResult();

注意:这里的QueryHintsorg.hibernate.ejb.QueryHints包下的,而且。使用查询缓存的前提是在配置文件里配置了启用查询缓存

<property name="hibernate.cache.use_query_cache" value="true"/>
<script type="text/javascript"> $(function () { $('pre.prettyprint code').each(function () { var lines = $(this).text().split('\n').length; var $numbering = $('
    ').addClass('pre-numbering').hide(); $(this).addClass('has-numbering').parent().append($numbering); for (i = 1; i <= lines; i++) { $numbering.append($('
  • ').text(i)); }; $numbering.fadeIn(1700); }); }); </script>
---

⭐ 优质资源

学习不止于此,推荐继续深入: