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

Java 使用JPA/Hibernate保持数据库连接,java,hibernate,jpa,Java,Hibernate,Jpa,我正在应用程序中使用JPA和Hibernate。(使用PostgreSQL作为DBMS) 我执行了许多select语句,以获取按名称存储在DB中的项 我使用以下代码: //em is the javax.persistence.EntityManager Object. Query q = em.createQuery("Select i from Item i where i.name = :name"); q.setParameter("name", namePar

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

我执行了许多select语句,以获取按名称存储在DB中的项

我使用以下代码:

    //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();
//em是javax.persistence.EntityManager对象。
Query q=em.createQuery(“从i项中选择i,其中i.name=:name”);
q、 setParameter(“名称”,nameParam);
List results=q.getResultList();
所以,我的问题是,连接数据库、准备语句和关闭连接会浪费很多时间。 我使用EclipseTTP跟踪哪些方法花费的时间最多:(每分钟)

com.mchange.v2.c3p0.impl.NewProxyPreparedStatement.executeQuery():~22s com.mchange.v2.c3p0.impl.NewProxyConnection().close():~16s com.mchange.v2.c3p0.impl.NewProxyConnection().prepareStatement(字符串):~12s com.mchange.v2.c3p0.impl.AbstractPoolBackedDataSource().GetConnetAction():~6s com.mchange.v2.c3p0.impl.NewProxyPreparedStatement.close():~4s

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


所以我的问题是:我如何保持这个连接打开

评测确实会对性能产生一些影响,但是,报告她的执行时间异常缓慢,这是出乎意料的。我的意思是,你正在使用一个连接池,获得一个连接和关闭应该几乎是瞬间的,这些操作应该根本不是问题——这就是使用连接池的意义所在。而准备一份声明的时间高得离谱

有些地方出了问题,保持连接打开肯定不是解决方案(池应该可以正常工作)。但是没有足够的信息进行诊断。因此,请您添加以下方面的详细信息:

  • 上下文(容器外?容器内?)
  • 连接池配置
  • 显示的代码段周围的代码
作为补充说明,您应该倾向于使用命名查询(它们通常由JPA提供程序预编译,以避免每次解析JPQL和生成SQL的开销)。但这不是问题所在。根本原因必须解决

资源

评测确实会对性能产生一些影响,但报告她的执行时间仍然非常缓慢,这是出乎意料的。我的意思是,你正在使用一个连接池,获得一个连接和关闭应该几乎是瞬间的,这些操作应该根本不是问题——这就是使用连接池的意义所在。而准备一份声明的时间高得离谱

有些地方出了问题,保持连接打开肯定不是解决方案(池应该可以正常工作)。但是没有足够的信息进行诊断。因此,请您添加以下方面的详细信息:

  • 上下文(容器外?容器内?)
  • 连接池配置
  • 显示的代码段周围的代码
作为补充说明,您应该倾向于使用命名查询(它们通常由JPA提供程序预编译,以避免每次解析JPQL和生成SQL的开销)。但这不是问题所在。根本原因必须解决

资源

如何管理交易?手动、spring、JavaEE?如何管理事务?手动、spring、JavaEE?