我使用Hibernate5.2,在沒(méi)關(guān)閉session的情況下測(cè)試發(fā)現(xiàn)connection hashcode都是一樣的
public void testSaveStudentsWithOpenSession() {
/*Hibernate5.x版本的測(cè)試方式*/
//獲得服務(wù)注冊(cè)對(duì)象
// 使用 final修飾引用變量時(shí),當(dāng)該引用變量被初始化賦值后,就不能再指向其他對(duì)象,但是該對(duì)象的內(nèi)容可以修改。
// TODO 或許正是在這里使用了final,使用openSession而沒(méi)有手動(dòng)關(guān)閉,多次之后而【不會(huì)】導(dǎo)致連接池溢出
final StandardServiceRegistry registry = new StandardServiceRegistryBuilder().configure().build();
try {
? ??
//獲得sessionFactory對(duì)象
SessionFactory sessionFactory = new MetadataSources(registry).buildMetadata().buildSessionFactory();
? ? //獲得session對(duì)象
Session session1 = sessionFactory.openSession();? ? //
//開(kāi)啟事務(wù)
Transaction transaction = session1.beginTransaction();
//生成一個(gè)學(xué)生對(duì)象
Students s = new Students(1,"張三豐","男",new Date(),"北京");
session1.doWork(new Work() {
@Override
public void execute(Connection connection) throws SQLException {
// TODO Auto-generated method stub
System.out.println("connection hashcode:" + connection.hashCode());
}
});
session1.save(s);
//session1.close()? //
transaction.commit();? //提交事務(wù)
//獲取第二個(gè)session
Session session2 = sessionFactory.openSession();
Transaction transaction2 = session2.beginTransaction();
s = new Students(2,"sd豐","男",new Date(),"北京");
session2.doWork(new Work() {
@Override
public void execute(Connection connection) throws SQLException {
// TODO Auto-generated method stub
System.out.println("connection hashcode:" + connection.hashCode());
}
});
session2.save(s);
//session1.close()? //
transaction2.commit();? //提交事務(wù)
} catch (Exception e) {
e.printStackTrace();
StandardServiceRegistryBuilder.destroy( registry );
}
}
}
2020-01-09
在 hibernate 5.0 以上,如果注釋掉? session.beginTransaction() 代碼,那么 connection 的 hashCode 是不相等的;或者直接打印?
2018-12-29
老師用的是4.X版本,大版本更新有區(qū)別的
2018-06-07
的確是一樣的,我也試過(guò)了,老師講的還是以參考為主吧,注重養(yǎng)成習(xí)慣,隨手關(guān)閉,just like 出門(mén)要把門(mén)窗鎖好
2018-05-30
hibernate 版本換成4.2.21
更換以下代碼:
//創(chuàng)建配置對(duì)象
Configuration cfg = new Configuration().configure();
//創(chuàng)建服務(wù)注冊(cè)對(duì)象
final ServiceRegistry registry = new ServiceRegistryBuilder().applySettings(
cfg.getProperties()).buildServiceRegistry();
//創(chuàng)建會(huì)話工廠對(duì)象
sessionFactory = cfg.buildSessionFactory(registry);
//創(chuàng)建會(huì)話對(duì)象
session = sessionFactory.openSession();