zoukankan      html  css  js  c++  java
  • 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  参考

  • 相关阅读:
    Android游戏音效实现
    对Android体系结构的理解--后续会补充
    实现软件版本新特性的具体步奏
    搜索栏的自定义
    有关导航栏的相关认识
    自定义tabBar中的注意事项
    多控制器的管理
    ios中创建控制器的几种方式
    利用高德地图官方提供的API实现模拟定位的功能
    IOS中利用NSKeyedArchiver进行数据的归档和恢复
  • 原文地址:https://www.cnblogs.com/cxqbk/p/10563602.html
Copyright © 2011-2022 走看看