默认情况下开启一级缓存,如下
@Testpublic void testSecondLevelCache() { User user = entityManager.find(User.class, 1); System.out.println("------------------");//只发送一条SQL查询语句 User user1 = entityManager.find(User.class, 1); }
@Testpublic void testSecondLevelCache() { User user = entityManager.find(User.class, 1); entityTransaction.commit(); entityManager.close(); System.out.println("------------------"); entityManager = entityManagerFactory.createEntityManager(); entityTransaction = entityManager.getTransaction(); entityTransaction.begin(); User user1 = entityManager.find(User.class, 1); //发送两条查询语句}
下面配置二级缓存
persistance.xml
org.hibernate.ejb.HibernatePersistence com.jpa.beans.User ENABLE_SELECTIVE
加入ehcache相关jar包
ehcache-core-2.4.3.jar
hibernate-ehcache-4.3.5.Final.jar
slf4j-api-1.6.1.jar
加入ehcache.xml(hibernate-release-4.3.5.Final\project\etc目录下)
在实体类上加入Cacheable注解
@Cacheable(true)@Table(name = "jps_user")@Entitypublic class User { @GeneratedValue @Id private Integer id; private String username; private String password; //getter setter}
测试
@Testpublic void testSecondLevelCache() { User user = entityManager.find(User.class, 1); entityTransaction.commit(); entityManager.close(); System.out.println("------------------"); entityManager = entityManagerFactory.createEntityManager(); entityTransaction = entityManager.getTransaction(); entityTransaction.begin(); User user1 = entityManager.find(User.class, 1); }
以上测试代码只会发送一条SQL查询语句。二级缓存启用成功。