JPA(带EclipseLink)性能问题

JPA(带EclipseLink)性能问题,jpa,jpa-2.0,eclipselink,Jpa,Jpa 2.0,Eclipselink,我刚刚开始使用JPA(带有EclipseLink实现)。我有一个非常简单的select查询,比如 (1) entityManager.find(SomeEntity.class,SomeEntityPK); (2) entityManager.createQuery(“从某个实体x中选择x,其中x.isDefault=true”).getResultList() SomeEntity表中的记录数约为50(非常小的表) 查询(1)最初需要3秒,但随后的命中只需要200毫秒。显然,缓存正在发挥作用。

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

(1) entityManager.find(SomeEntity.class,SomeEntityPK); (2) entityManager.createQuery(“从某个实体x中选择x,其中x.isDefault=true”).getResultList()

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

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


有没有办法提高性能?一个简单的JDBCSELECT只需使用EclipseLink就可以使用不同级别的缓存。我认为查询缓存就是这里描述的您可能要查找的内容 在这里解释一下

entityManager API(查找、合并…)与自定义查询的执行方式不同。entityManager将始终尝试从持久性上下文中查找实体。只有在持久性上下文中找不到实体时,它才会查看数据库。一旦实体实例加载到持久性上下文中,它就会被缓存,直到事务提交或手动刷新持久性上下文。这就是为什么第二个查询要快得多的原因。自定义查询每次都会通过持久性上下文缓存与数据库交互。