有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

当我们使用c3p0连接池时,java会话应该在hibernate中关闭吗?

我想知道在hibernate中使用c3p0连接池时是否应该使用session.close()?或者c3p0在一定时间间隔后自动关闭?我需要在之前打开会话吗

SessionFactory factory = HibernateUtil.getSessionFactory();
Session session=factory.openSession();  

因为在下面的教程中,它不会关闭会话

http://examples.javacodegeeks.com/enterprise-java/hibernate/hibernate-connection-pool-configuration-with-c3p0-example/

正确的方法是什么

编辑:

这就是我的密码

@SuppressWarnings("unchecked")
@Override
public JSONObject  getUserDetails(int id) {
    long lStartTime = new Date().getTime(); 
    JSONObject obj = new JSONObject();
    try(Session session=factory.openSession()) {
        Employee emp=(Employee)session.load(Employee.class,id);     

        if(emp != null) {
            obj.put("id", emp.getId());
            obj.put("name", emp.getName());
        }                  
        long lEndTime = new Date().getTime();
        log.info("[ Personal Details ]Time elapsed For Fetching :"+(lEndTime - lStartTime));

    } catch (Exception e) {
        // TODO: handle exception
    }
}

共 (3) 个答案

  1. # 1 楼答案

    正如ELLIOT所说,最好不依赖任何东西手动关闭会话,或者如果使用Java7或更高版本,可以使用上面指定的try块

  2. # 2 楼答案

    是的,使用try with resources是一个更好的选择

    但这里有一些关于它的假设:

    1. try with resources语句引发的任何异常都是 压制
    2. 您可以使用catch,finally block和normal一样 试着接住
    3. 您可以在try中声明多个用分号分隔的资源,如
    try (
            java.util.zip.ZipFile zf =
                 new java.util.zip.ZipFile(zipFileName);
            java.io.BufferedWriter writer = 
                java.nio.file.Files.newBufferedWriter(outputFilePath, charset)
        )
    
    1. 它首先在try块结束后关闭资源,即是否有任何异常来自try块。然后执行catch,最后执行block
    2. 在try with resource语句中声明的资源必须实现AutoCloseable或Closeable接口
  3. # 3 楼答案

    我建议您尽快close使用您的资源,这样连接将更快地返回到池。您还可以使用^{} Statement来确保发生这种情况

    SessionFactory factory = HibernateUtil.getSessionFactory();
    try (Session session = factory.openSession()) {
        // ...
    }