gpt4 book ai didi

java - 使用 JPA/Hibernate 保持数据库连接

转载 作者:太空宇宙 更新时间:2023-11-04 08:50:24 24 4
gpt4 key购买 nike

我在应用程序中使用 JPA 和 Hibernate。 (使用 PostgreSQL 作为 DBMS)

我执行了很多选择语句来按名称获取存储在数据库中的项目。

我使用以下代码:

    //em is the javax.persistence.EntityManager Object.
Query q = em.createQuery("Select i from Item i where i.name = :name");

q.setParameter("name", nameParam);

List<NavigationItem> results = q.getResultList();

所以,我的问题是,我通过连接到数据库、准备语句和关闭连接浪费了很多时间。我使用 Eclipse TPTP 来跟踪哪些方法花费的时间最多:(每分钟)

com.mchange.v2.c3p0.impl.NewProxyPreparedStatement.executeQuery(): ~22scom.mchange.v2.c3p0.impl.NewProxyConnection().close():~16scom.mchange.v2.c3p0.impl.NewProxyConnection().prepareStatement(String): ~12scom.mchange.v2.c3p0.impl.AbstractPoolBackedDataSource().getConnetction():~6scom.mchange.v2.c3p0.impl.NewProxyPreparedStatement.close(): ~4s

查询的执行需要他的时间,没关系,但我认为其他方法需要的时间比他们应该的要多。如果我可以保持连接打开多次(或数百次)执行,应用程序会快得多。

所以我的问题是:我怎样才能保持这个连接打开?

最佳答案

分析确实对性能有一些影响,但据报告,执行时间仍然非常sloooowww,这是出乎意料的。我的意思是,您正在使用连接池并获取连接并关闭因此几乎是瞬时的,这些操作根本不应该成为问题 - 这在某种程度上是使用连接池的要点。准备声明的时间长得离谱。

某处出了问题,保持连接打开绝对不是解决方案(池应该可以工作)。但没有足够的信息进行诊断。那么,您能否添加一些详细信息:

  • 上下文(容器外?容器内?)
  • 连接池配置。
  • 围绕您所显示的代码片段的代码。

顺便说一句,您应该倾向于使用命名查询(它们通常由 JPA 提供程序进行预编译,以避免每次解析 JPQL 和生成 SQL 的开销)。但这不是问题所在。必须解决根本原因。

资源

关于java - 使用 JPA/Hibernate 保持数据库连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3476820/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com