下面是我的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处理连接。我错过了什么。或者我的代码有问题。?
答案 0 :(得分:2)
那是因为你没有关闭Hibernate Sessions,因此数据库连接永远不会被释放。
您甚至不应该使用HibernateDaoSupport
。您应该使用HibernateTransactionManager,它负责跨@Transactional服务边界的事务和会话管理。