为了账号安全,请及时绑定邮箱和手机立即绑定

getCurrentSession打印出的hashCode不同

Configuration config = new Configuration().configure();
		ServiceRegistry serviceRegistry = new ServiceRegistryBuilder().applySettings(config.getProperties()).buildServiceRegistry();
		SessionFactory sessionFactory = config.buildSessionFactory(serviceRegistry);
		Session session1 = sessionFactory.getCurrentSession();
		Transaction transaction = session1.beginTransaction();
		Student s = new Student("张三", "男", new Date(), "北京");
		session1.doWork(new Work() {
			@Override
			public void execute(Connection connection) throws SQLException {
				System.out.println("session1的hashcode:"+connection.hashCode());
			}
		});
		session1.save(s);
		transaction.commit();
		
		Session session2 = sessionFactory.getCurrentSession();
		transaction = session2.beginTransaction();
		s = new Student("李四", "男", new Date(), "上海");
		session2.doWork(new Work() {
			@Override
			public void execute(Connection connection) throws SQLException {
				System.out.println("session2的hashcode:"+connection.hashCode());
			}
		});
		session2.save(s);
		transaction.commit();

按理说两次打印的hashCode应该相同

但我打印出的不一样

session1的hashcode:1574258553

session2的hashcode:1774088918

求大神帮看下,我代码错了么?

正在回答

4 回答

我目前知道的是:因为你第一个session关闭了,所以内存已经结束了。下一个session是获取不到的。所以hashcode会不一样。但是我看了视频的时候,发现老师也是这样写 居然一样,我震惊了。

因为session是在commit();后自动关闭的,你可以试试  在commit前再弄个session,输出的hashcode是一样的。如果有新发现可以联系我。愿意分享心得。

1 回复 有任何疑惑可以回复我~
#1

xiele 提问者

牛!貌似是这个问题,学到新东西了,谢谢!
2016-03-21 回复 有任何疑惑可以回复我~
#2

zqdip

为什么会是这样?
2017-09-22 回复 有任何疑惑可以回复我~

但是放到前面,会提示session is closed,第二个没有办法执行了

0 回复 有任何疑惑可以回复我~

是的,执行Junit测试的时候要选定特定的方法名。

0 回复 有任何疑惑可以回复我~

我的也是相同的额。。。你的代码看了下,似乎也是对的啊。。。而且用你的代码测试过了。也是相同的。我怀疑是不是在执行test的时候,你选错测试方法了?选了openSession那个。。

0 回复 有任何疑惑可以回复我~

我的也相同欸,不明觉厉

0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

getCurrentSession打印出的hashCode不同

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信