当前位置: 首页 > 知识库问答 >
问题:

JPA(带EclipseLink)性能问题

金慈
2023-03-14

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

(1) 实体管理器。查找(SomeEntity.class,SomeEntityPK);(2) 实体管理器。createQuery(“从某个实体x中选择x,其中x.isDefault=true”)。getResultList();

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

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

有没有办法提高性能?一个简单的JDBC选择只需要

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

共有1个答案

朱季
2023-03-14

Eclipse Link有许多不同级别的缓存可以使用。我认为查询缓存是你可能在这里描述的http://docs.oracle.com/cd/E25054_01/core.1111/e10108/toplink.htm#BCGEGHGE并在这里解释了一点http://wiki.eclipse.org/Introduction_to_EclipseLink_Queries_(ELUG)#How_to_Cache_Query_Results_in_the_Query_Cache

 类似资料:
  • 我目前正在使用Java EE/Eclipselink和PostgreSQL开发一个web应用程序。关于我的实体,我特别管理“Project”、“User”和“Right”(读、写、删除等访问权限)。这些实体之间的关系是:一个项目可以有多个对该项目拥有不同权限的用户。因此,我得到了一个三重关联:Project+User+Right。 在这个协会坚持的过程中,我面临着一个恼人的问题。当我用它的信息持久

  • 有一种方法可以绕过持久性上下文,只将实体用作数据库表的包装器?

  • 问题内容: 我尤其对使用PostgreSQLs 类型感兴趣。 问题的核心似乎是Eclipselink中没有要 类型的内部映射。因此,使用朴素的方法: …并尝试插入对象,但出现异常: 我猜很公平。 浏览EclipseLink文档,似乎适用的自定义项(转换映射,本机查询,转换器)依赖于由受支持的映射(数字,日期,字符串等)组成的数据,因此这使使用它变得很尴尬供应商特定类型。 令人沮丧的主要原因是pos

  • 问题的核心似乎是Eclipselink中没有到类型的内部映射。因此,使用一种简单的方法: ...在尝试插入一个对象时,我遇到了一个异常: 我想很公平。 通过查看EclipseLink文档,似乎适用的定制(转换映射、本机查询、转换器)依赖于由所支持的映射(数字、日期、字符串等)组成的数据,因此使用特定于供应商的类型很难做到这一点。 这是如此令人沮丧的主要原因是,posgresql中的类型与text/

  • 我有一个应用引擎项目,使用EclipseLink作为JPA持久性管理器,将数据持久化到云SQL实例中。 由于应用程序引擎(多实例环境)的性质,我们对如何在实例之间同步JPA缓存有一些担忧。 每个JPA实例在单个应用引擎实例中运行,因此不使用应用引擎的Memcache服务(否则,EclipseLink不“知道”什么是应用引擎Memcache或如何使用它) 下面是一个简单的场景示例: 在四处搜索这种行

  • 我尝试记录JPA实体的任何更改。因此,每个实体都继承自一个抽象实体类,该类具有日志条目对象列表。 AbstractEntity类: LogEntry类: 我的方法是创建一个新的LogEntry对象,并在实体更新或持久化之前将其添加到实体的LogEntry列表中。 我尝试了以下解决方案: 几乎所有这些试验都使我能够更改受影响实体的属性(如名称或validTo)。但没有任何解决方案提供创建新LogEn