如何使用Hibernate处理连接

时间:2015-01-15 13:27:55

标签: java spring hibernate c3p0 google-cloud-sql

下面是我的Hibernate.xml

    <property name="hibernateProperties">
        <props>
            <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
            <prop key="hibernate.show_sql">false</prop>
            <prop key="hibernate.hbm2ddl.auto">update</prop>
            <prop key="hibernate.c3p0.min_size">5</prop>
            <prop key="hibernate.c3p0.max_size">20</prop>
            <prop key="hibernate.c3p0.timeout">100</prop>
        </props>
    </property>

及以下是GenericDaoImpl

的代码
public abstract class GenericDaoImpl <T> extends HibernateDaoSupport  implements IGenericDao<T> {

   private Class< T > type;

   @Autowired
   public void setHibernateSessionFactory(SessionFactory sessionFactory)
   {
       setSessionFactory(sessionFactory);
   }

   @Override
   public T save(T t) {
      Session session = getSession();
      session.saveOrUpdate(t);
      return t;
   }
}

以下是DaoImpl类的代码

       Session session = (Session) getSession();
       Query executeQuery = session.createQuery("XXXXX");
        customerDetails = executeQuery.list();
        if(customerDetails !=null)
        {
            if(!customerDetails.isEmpty())
            {
                customerDomain = customerDetails.get(0);
            }
        }

我使用getSession()在DaoImpl类中执行查询。对于每个连接,它都在创建与数据库的新连接。我已将最大连接大小设为20,但该限制正在交叉。我正在通过csv更新用户的详细信息,当时它正在超过最大大小限制。它显示556连接仅更新86用户。如何使用Hibernate处理连接。我错过了什么。或者我的代码有问题。?

1 个答案:

答案 0 :(得分:2)

那是因为你没有关闭Hibernate Sessions,因此数据库连接永远不会被释放。

您甚至不应该使用HibernateDaoSupport。您应该使用HibernateTransactionManager,它负责跨@Transactional服务边界的事务和会话管理。