jpa_缓存
Posted cxqbk
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了jpa_缓存相关的知识,希望对你有一定的参考价值。
查询缓存
https://blog.csdn.net/qq_24084925/article/details/51890194
如果想要使用缓存,只查询一次,可以使用setHint
Query query = entityManager.createQuery(jpql).setHint(QueryHints.HINT_CACHEABLE, true);
注意:这里的QueryHints是org.hibernate.ejb.QueryHints包下的,并且,使用查询缓存的前提是在配置文件中配置了启用查询缓存
<property name="hibernate.cache.use_query_cache" value="true"/>
使用二级缓存
https://blog.csdn.net/abc997995674/article/details/80236865
一级缓存
一级缓存是session级别的缓存,在JPA中一个entityManager对应一个session,一个session就对应一个缓存。
查询两次id为1的user
User user1 = entityManager.find(User.class, 1);
User user2 = entityManager.find(User.class, 1);
1
2
结果发现只调用了一次sql查询,因为使用了一级缓存,当第一次find就把查询到的数据放入到还缓存中,第二次再查会先去缓存中找,如果有就直接使用而不用重新查询。
如果查询一次后,关掉entityManager,再查询
User user1 = entityManager.find(User.class, 1);
entityManager.close();
entityManager = factory.createEntityManager();
User user2 = entityManager.find(User.class, 1);
1
2
3
4
发现查询了两次,因为entityManager关闭之后,其对应的缓存也就没有了。
然后有重新开启一个entityManager,就和之前的不是同一个了。
jpa--8.api(EntityTransaction)
https://blog.csdn.net/qq_26553781/article/details/79721530
1.1 概念
EntityTransaction接口用来管理资源层实体管理器的事务操作。通过调用实体管理器的getTransaction方法获得其实例。
1.2 方法
• begin ()
用于启动一个事务,此后的多个数据库操作将作为整体被提交或撤消。若这时事务已启动则会抛出 IllegalStateException 异常。
• commit ()
用于提交当前事务。即将事务启动以后的所有数据库更新操作持久化至数据库中。
• rollback ()
撤消(回滚)当前事务。即撤消事务启动后的所有数据库更新操作,从而不对数据库产生影响。
• setRollbackOnly ()
使当前事务只能被撤消。
• getRollbackOnly ()
查看当前事务是否设置了只能撤消标志。
1.3 参考
以上是关于jpa_缓存的主要内容,如果未能解决你的问题,请参考以下文章
jpa缓存导致无法查询到更新后的数据&android出现ANR的一个解决办法
spring-data-jpa+hibernate 各种缓存的配置演示