我正在开发一个测验系统,我是JPA&休眠.我已经使用了hibernate 4.2.3并且我使用了c3p0连接池.
代码工作正常,但每个EntityManager创建一个永不关闭的连接.一旦达到最大连接数,则应用程序无法访问数据库.
我正在使用
MySQL 5.6.10,当我在工作台中看到连接时,我从未看到连接被破坏.应用程序不会重用连接.
我的猜测是连接不会返回到连接池.我不知道我怎么写“manager.close()”.
hibernate内部连接池也是如此. (如果我删除c3p0.)
以下是“persistence.xml”的属性
这是我如何访问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 getMarks(int id){
EntityManagerFactory factory= EntityMangFactory.getEntityManagerFactory();
EntityManager manager= factory.createEntityManager();
manager.getTransaction().begin();
TypedQuery 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 ls=q.getResultList();
manager.close();
return ls;
}
请指出我错在哪里.
提前致谢.