【发布时间】:2011-03-29 10:56:30
【问题描述】:
我在应用程序中使用 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(): ~22s com.mchange.v2.c3p0.impl.NewProxyConnection().close(): ~16s com.mchange.v2.c3p0.impl.NewProxyConnection().prepareStatement(String): ~12s com.mchange.v2.c3p0.impl.AbstractPoolBackedDataSource().getConnetction(): ~6s com.mchange.v2.c3p0.impl.NewProxyPreparedStatement.close(): ~4s
查询的执行需要他的时间,没关系,但我认为其他方法需要的时间比他们应该的要多。 如果我可以保持连接打开几个(或几百个)执行,应用程序会快很多。
所以我的问题是:我怎样才能保持这个连接打开?
【问题讨论】:
-
事务是如何管理的?手动、spring、JavaEE?