关于hibernate session关闭的问题,请大家帮忙

最近再看hibernate里面session的概念以及使用,它的两种获取方式和使用基本都明白了,但是现在有个问题,是关于session关闭的,请看下面代码片段

[code="java"]
Configuration config = new AnnotationConfiguration().configure();
SessionFactory sessionFactory = config.buildSessionFactory();
for(int i=0;i<500;i++){
Session session = sessionFactory.openSession();
session.createCriteria(SysConfig.class).list();
//session.close();
}
[/code]

这里我开了500个session,每个都做了一次数据库的查询,而且都没有执行关闭,为何不报数据库的连接异常,我把连接数提升到5000照样正常执行,请问数据库连接可能自己释放吗?

又 如果这个方法操作结束后,session对象被JVM回收了,连接会不会自动被释放呢?

使用的hibernate的数据源,配置时我记得有一项是会检测数据库连接池的使用情况,如果你没有手工主动释放,间隔一定时间,hibernate会自动检测,如果没有语句使用,或这是超时,它就会释放掉,如果是在用,而且已经超了上限,应该是可以自增连接的。

你可以看看hibernate的配置。

正常这种数据库连接的操作和流的操作是要求手动根据需要进行关闭的,从系统资源的角度来说,可以保证资源的合理释放和使用。
相信你刚开始学习这个数据库连接的时候,老师肯定是跟你说要及时关闭的。
所以还是老老实实的手工关闭吧。符合常理,也会避免出现问题时无法定位。