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已经知道了。
我正在尝试为两个 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已经知道了。