Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/394.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何处理Hibernate连接_Java_Hibernate_C3p0 - Fatal编程技术网

Java 如何处理Hibernate连接

Java 如何处理Hibernate连接,java,hibernate,c3p0,Java,Hibernate,C3p0,我刚开始冬眠。我已经创建了SessionFactory并获得了如下会话。我正在使用c3p0连接提供程序 public static SessionFactory getSessionFactory() { try { if (sessionFactory == null) { Configuration configuration = loadDBConfiguration(); if (configuration != n

我刚开始冬眠。我已经创建了SessionFactory并获得了如下会话。我正在使用c3p0连接提供程序

public static SessionFactory getSessionFactory() {
    try {
        if (sessionFactory == null) {
            Configuration configuration = loadDBConfiguration();
            if (configuration != null) {
                sessionFactory = configuration.buildSessionFactory();
            } else {
                log.info("---- Configuration failed ----");
            }
        }
    } catch (Exception ex) {
        log.info("---- Initial SessionFactory creation failed ----");
    }
    return sessionFactory;
}

public static EntityManagerFactory getEntityManagerFactory() {
    try {
        Session session = getSessionFactory().openSession();
        entityManagerFactory = session.getEntityManagerFactory();
    } catch (Exception e) {
        log.error(e);
    }
    return entityManagerFactory;
}

public static EntityManager getEntityManager() {
    try {
        EntityManagerFactory entityManagerFactory = getEntityManagerFactory();
        return entityManagerFactory.createEntityManager();  
    } catch (Exception e) {
        log.error(e);
    }
    return null;
}
我对下面的事情感到困惑

  • 我应该在提交()后关闭连接,还是c3p0连接提供程序将在提交()后关闭
  • 我应该在每个请求上调用getEntityManager()还是像singleton一样使用
  • 若我被用作单例,那个么若服务器同时接收多个请求,它是否会影响任何并行事务.begin()或事务.commit()
  • 此外,在单例中,实体仍然在会话中保持,直到手动关闭或清除为止。所以在这种情况下我需要做什么

  • 目前,在我的所有EntityManager类中,如UserManager、AccountsManager,都会调用getEntityManager()。在RDS中经过一段时间后,它显示了20个连接,甚至我的应用程序也没有处理任何用户请求。

    您应该关闭连接。由于您的连接是由数据库连接池包装的,因此它们不会在物理上关闭,但会返回到数据库连接池。这需要完成,否则连接池会认为连接正在使用,当您达到池限制时,将不会打开新连接。
    将会话工厂保持为单例。您应该为每个线程打开一个新会话。

    您应该关闭连接。由于您的连接是由数据库连接池包装的,因此它们不会在物理上关闭,但会返回到数据库连接池。这需要完成,否则连接池会认为连接正在使用,当您达到池限制时,将不会打开新连接。 将会话工厂保持为单例。您应该为每个线程打开一个新会话