gpt4 book ai didi

java - entitymanager.close() 不关闭与数据库的连接

转载 作者:搜寻专家 更新时间:2023-11-01 03:39:20 25 4
gpt4 key购买 nike

我正在开发一个测验系统,我是 JPA 和 Hibernate 的新手。我使用过 hibernate 4.2.3 并且使用过 c3p0 连接池。代码工作正常,但每个 EntityManager 创建一个永远不会关闭的连接。一旦达到最大连接数,应用程序就无法访问数据库。我正在使用 MySQL 5.6.10,当我在工作台中看到连接时,我从未看到连接被破坏。并且应用程序没有重用连接。

我的猜测是连接没有返回到连接池。我不知道我是怎么写“manager.close()”的。

hibernate 内部连接池也是如此。 (以防我删除 c3p0。)

这里是“persistence.xml”的属性

<property name="hibernate.connection.provider_class" value="org.hibernate.service.jdbc.connections.internal.C3P0ConnectionProvider" />
<property name="hibernate.c3p0.max_size" value="10" />
<property name="hibernate.c3p0.min_size" value="2" />
<property name="hibernate.c3p0.acquire_increment" value="1" />
<property name="hibernate.c3p0.idle_test_period" value="5000" />
<property name="hibernate.c3p0.max_statements" value="20" />
<property name="hibernate.c3p0.timeout" value="500" />

这是我访问 EntityManagerFactory 的方式

public class EntityMangFactory {

private static EntityManagerFactory emf=null;

private static void initEntityManagerFactory()
{
emf=Persistence.createEntityManagerFactory("com.oes.jpa"); //persistence-unit-name//

}

public static EntityManagerFactory getEntityManagerFactory()
{
if(emf==null){
initEntityManagerFactory();
}
return emf;
}


}

这是我访问数据库的方式。

public static List<MarksDTO> getMarks(int id){

EntityManagerFactory factory= EntityMangFactory.getEntityManagerFactory();
EntityManager manager= factory.createEntityManager();
manager.getTransaction().begin();
TypedQuery<MarksDTO> q= manager.createQuery("select new com.examsystem.DTO.MarksDTO(m.courseId,m.score,m.setNo,m.courseName) from MarksBean as m where TraineeID=:TraineeID",MarksDTO.class);
q.setParameter("TraineeID", id);
List<MarksDTO> ls=q.getResultList();


manager.close();

return ls;
}

请指出我错的地方。

提前致谢。

最佳答案

我没有提交每笔交易。因此问题。

关于java - entitymanager.close() 不关闭与数据库的连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19107408/

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