0

我刚刚开始使用 JPA(使用 EclipseLink 实现)。我有一个非常简单的选择查询,比如

(1) entityManager.find(SomeEntity.class, SomeEntityPK); (2) entityManager.createQuery("Select x from SomeEntity x where x.isDefault = true").getResultList();

SomeEntity 表中的记录数约为 50(非常小的表)。

查询 (1) 最初需要 3 秒,但随后的命中只需 200 毫秒。显然缓存在起作用。然而,Query (2) 的所有调用都需要 2 秒——想知道为什么不使用缓存。我了解查询(那些不使用 Id 或索引的)总是命中数据库,并且从缓存中使用实体关系。

有什么方法可以提高性能吗?一个简单的 JDBC 选择只需 <300 毫秒即可获取 Query (2) 的数据。

[更新] 我想我已经解决了这个问题。表“SomeEntity”中的列之一是 Oracle XMLType。由于某些问题,我不得不删除此字段,而是使用 CLOB 字段来存储 xml 数据。瞧,JPA 突然开始缓存查询结果。虽然我不知道 JPA 不缓存 XMLType 的原因。

4

1 回答 1

1

EclipseLink has a number of caches at different levels that can be used. I think the query cache is what you might be looking for described here http://docs.oracle.com/cd/E25054_01/core.1111/e10108/toplink.htm#BCGEGHGE And explained a bit here http://wiki.eclipse.org/Introduction_to_EclipseLink_Queries_%28ELUG%29#How_to_Cache_Query_Results_in_the_Query_Cache

于 2013-02-14T04:01:43.387 回答