【java框架】JPA(4) -- JPA二级缓存与JPQL
2020-05-24 16:11:41来源:博客园 阅读 ()
【java框架】JPA(4) -- JPA二级缓存与JPQL
1. JPA二级缓存配置
JPA中的二级缓存是在EntityManagerFactory中,但是默认EntityManagerFactory中的二级缓存是没有开启的,如果需要开启二级缓存需要做如下配置:
注:在hibernate4.3.8中是默认开启的二级缓存,无需配置;
步骤如下:
① 导入JPA二级缓存的jar包;
Jar包目录:
\hibernate-release-4.3.8.Final\lib\optional\ehcache\
ehcache-core-2.4.3.jar
hibernate-ehcache-4.3.8.Final.jar
slf4j-api-1.6.1.jar
② 对应在persistence.xml中添加如下配置:
<persistence xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd" version="2.0"> <!--持久化单元 name:和项目名称对应--> <persistence-unit name="cn.yif.jpa04" transaction-type="RESOURCE_LOCAL"> <!-- ALL:所有的实体类都被缓存 --> <!-- NONE:所有的实体类都不被缓存. --> <!-- ENABLE_SELECTIVE:标识 @Cacheable(true) 注解的实体类将被缓存 --> <!-- DISABLE_SELECTIVE:缓存除标识 @Cacheable(false) 以外的所有实体类 --> <!-- UNSPECIFIED:默认值,JPA 产品默认值将被使用 --> <shared-cache-mode>ENABLE_SELECTIVE</shared-cache-mode> <properties> <!-- 必须配置4个连接数据库属性:配置信息可以在project/etc/hibernate.properties中找到 --> <property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver" /> <property name="hibernate.connection.url" value="jdbc:mysql:///jpa04_0523" /> <property name="hibernate.connection.username" value="root" /> <property name="hibernate.connection.password" value="admin" /> <!-- 必须配置1个数据库方言属性 --> <!-- 实现跨数据库关键类 :查询MySQLDialect的getLimitString方法 --> <property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect" /> <!-- 可选配置 --> <!-- 是否自动生成表 --> <property name="hibernate.hbm2ddl.auto" value="validate" /> <!-- 是否显示sql --> <property name="hibernate.show_sql" value="true" /> <!-- 格式化sql --> <!--<property name="hibernate.format_sql" value="true" />--> <!-- hibernate.cache.use_second_level_cache:是否开启二级缓存 --> <property name="hibernate.cache.use_second_level_cache" value="true"/> <!-- hibernate.cache.region.factory_class :二级缓存的方言(选择的哪个工厂) org.hibernate.cache.internal.EhCacheRegionFactory:EhCache缓存 比较尴尬的是:文档上写错了 (org.hibernate.cache.ehcache.EhCacheRegionFactory) --> <property name="hibernate.cache.region.factory_class" value="org.hibernate.cache.ehcache.EhCacheRegionFactory"/> <!-- hibernate.cache.use_query_cache:是否开启查询缓存 注意:必需要开启二级缓存,查询缓存才能起作用 --> <property name="hibernate.cache.use_query_cache" value="true"/> </properties> </persistence-unit> </persistence>
③ 在对应的Entity类上加上注解:@Cacheable(true)
@Cacheable(true) @Entity public class Employee { @Id @GeneratedValue private Long id; private String name;
2. JPA集合缓存配置
集合上面加上:@Cache(usage = CacheConcurrencyStrategy.READ_WRITE),就可以缓存这个集合
@OneToMany(fetch = FetchType.LAZY, mappedBy = "department") @org.hibernate.annotations.Cache(usage = CacheConcurrencyStrategy.READ_WRITE) //注意:hibernate集合缓存一般不用,不需要配置,配置完之后性能更差 //如果一定要配置集合缓存,集合中的对象也一定要能够放到缓存中 private Set<Employee> employeeSet = new HashSet<Employee>();
3. JPA查询缓存配置
JPA查询缓存比较简单,只需要加上query1.setHint(QueryHints.HINT_CACHEABLE, true)即可。
Query query1 = entityManager.createQuery("select o from Employee o where o.id = ?"); //把这个query1放到查询缓存中,也会到查询缓存中取 query1.setHint(QueryHints.HINT_CACHEABLE, true); query1.setParameter(1, 1L);
原文链接:https://www.cnblogs.com/yif0118/p/12952010.html
如有疑问请与原作者联系
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- 国外程序员整理的Java资源大全(全部是干货) 2020-06-12
- 2020年深圳中国平安各部门Java中级面试真题合集(附答案) 2020-06-11
- 2020年java就业前景 2020-06-11
- 04.Java基础语法 2020-06-11
- Java--反射(框架设计的灵魂)案例 2020-06-11
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash