默认情况下开启一级缓存,如下

@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查询语句。二级缓存启用成功。