我刚开始使用JPA(使用EclipseLink实现)。我有一个非常简单的选择查询,比如
(1)entityManager.find(SomeEntity.class,SomeEntityPK); (2)entityManager.createQuery(“从SomeEntity x中选择x,其中x.isDefault = true”)。getResultList();
SomeEntity表中的记录数约为50(非常小的表)。
查询(1)最初需要3秒,但后续命中只需要200毫秒。显然缓存正在发挥作用。 但是,Query(2)对所有调用都需要2秒 - 不知道为什么不使用缓存。我理解Query(那些不使用Id或Index)总是命中DB,而实体关系则来自Cache。
有没有办法改善表现?简单的JDBC选择只需要<300ms来获取Query(2)的数据。
[UPDATE] 我想我已经解决了这个问题。表'SomeEntity'中的一个columb是Oracle XMLType。由于某些问题,我不得不删除此字段,而是使用CLOB字段来存储xml数据。瞧,JPA突然开始缓存查询结果。虽然我不知道为什么JPA不缓存XMLType。
答案 0 :(得分:1)
EclipseLink有许多可以使用的不同级别的缓存。我认为查询缓存是您在此处描述的内容 http://docs.oracle.com/cd/E25054_01/core.1111/e10108/toplink.htm#BCGEGHGE 并在这里解释了一下 http://wiki.eclipse.org/Introduction_to_EclipseLink_Queries_%28ELUG%29#How_to_Cache_Query_Results_in_the_Query_Cache