Ehcache 仅适用于 Hibernate 中的一个 table

Ehcache working only for one table in Hibernate

我正在尝试为两个 table 使用二级缓存,但它只对一个 table 有效。我的ehcache.xml配置如下

<?xml version="1.0"?>  
<ehcache>  
 <defaultCache   
   maxElementsInMemory="100"   
   eternal="false"   
   timeToIdleSeconds="120"   
   timeToLiveSeconds="200" />  

   <cache name="com.cni.Employee"   
   maxElementsInMemory="100"   
   eternal="false"   
   timeToIdleSeconds="10"   
   timeToLiveSeconds="200" />  

   <cache name="com.cni.Person"   
   maxElementsInMemory="100"   
   eternal="false"   
   timeToIdleSeconds="10"   
  timeToLiveSeconds="200" />  

</ehcache>  

只有 "Employee" class 被缓存。对于 class,我第一次只能看到一个 SQL 查询。但是对于 "Person" class,每次当我点击网络服务时,它总是显示 SQL 查询。我还需要配置什么吗?

我的人 class 是

 @Cache(usage = CacheConcurrencyStrategy.READ_ONLY)
@Entity
@Table(name = "person")
public class Person {
@Override
public String toString() {
    return "Person [id=" + id + ", userId=" + userId
            + ", courseId=" + courseId + ", courseValue=" + courseValue
            + "]";
}
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private int id;
private String userId;
private String courseId;
private String courseValue;

我的select查询码

public JSONObject getCourseDetails(String id) {

    System.setProperty("net.sf.ehcache.skipUpdateCheck", "true");
    JSONObject obj = new JSONObject();       
    try (Session session = factory.openSession()) {
        String hql = "FROM Person E WHERE E.userId = "+id;
        Query query = session.createQuery(hql);
        List<?> results = query.list();
        Gson gson = new Gson();
        String jsonCourseList = gson.toJson(results);
        System.out.println("Course JSON Data: " + jsonCourseList);
    } catch (Exception e) {
        e.printStackTrace();
    }
    return obj;
}   

JPQL/HQL总是在数据库中执行。然后根据实体在查询结果集中的id从二级缓存中取出实体。

session.load方法的情况下,直接通过提供的id从二级缓存中获取实体。不需要在数据库中执行查询,因为id已经知道了。