【发布时间】:2017-01-05 06:22:47
【问题描述】:
我有一个包含 2 个“in”子句的查询。第一个 in 子句需要大约 125 个值,第二个查询子句需要大约 21000 个值。它使用 JPA CriteriaBuilder 实现。
查询本身执行速度非常快,并在几秒钟内返回结果。唯一的问题是entityManager.createQuery(CriteriaQuery) 需要大约 12-13 分钟才能返回。
我搜遍了SO,所有线程都与Query.getResultList的性能有关。他们都没有讨论entityManager.createQuery(CriteriaQuery) 的性能。如果您之前看到过此类行为,请告诉我,如何解决。
我的 JDK 版本是 1.7。 javaee-api的依赖版本是6.0。应用程序部署在 JBOSS EAP 6.4 上。但这不是现在的问题,因为我正在使用 junit 测试我的代码,使用 EntityManager 连接到实际的 Oracle 数据库。如果您需要更多信息,请告诉我。
【问题讨论】:
-
好吧,JPA 只是一个 API,下面有一个实现,这可能是问题的根源。休眠?开放JPA? EclipseLink?
-
您是否尝试过分析应用程序(YourKit 或 JProfiler 或任何其他...)?
-
@Gimby:嗯,我们正在使用 javax.persistence.* 中的所有 API,这些 API 在 java-api-6.0 jar 中可用。我们没有使用任何特定于休眠的 API。我的应用程序部署在 JBOSS EAP 6.4 上。
-
@hunter:我没有分析我的应用程序。这基本上是简单的代码,我知道我的代码卡在哪一行。它是我使用 entityManager.createQuery() 创建 TypedQuery 对象的地方
-
是的,但是您可以达到其他限制,例如查询的长度,具体取决于数据库。这个策略在我看来是错误的。
标签: java performance hibernate jpa entitymanager