Я использую JPA и Hibernate в приложении. (с PostgreSQL в качестве СУБД)
Я выполняю много операторов выбора, чтобы получить элементы, хранящиеся в БД по их имени.
Я использую следующий код:
//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 (): ~ 22 с
com.mchange.v2.c3p0.impl.NewProxyConnection (). close (): ~ 16 с
com.mchange.v2.c3p0.impl.NewProxyConnection (). prepareStatement (String): ~ 12 с
com.mchange.v2.c3p0.impl.AbstractPoolBackedDataSource (). getConnetction (): ~ 6 с
com.mchange.v2.c3p0.impl.NewProxyPreparedStatement.close (): ~ 4 с
Выполнение запроса требует своего времени, это нормально, но я думаю, что другим методам нужно больше времени, чем нужно.
Если бы я мог держать соединение открытым для нескольких (или нескольких сотен) выполнений, приложение было бы намного быстрее.
Итак, мой вопрос: как я могу сохранить это соединение открытым?