getCurrentSession打印出的hashCode不同

来源:2-6 session详解(下)

xiele

2015-09-07 11:22

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

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

写回答 关注

5回答

  • 梦编猿
    2016-03-18 18:07:07
    已采纳

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

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

    zqdip

    为什么会是这样?

    2017-09-22 23:51:18

    共 3 条回复 >

  • weixin_慕函数7518461
    2021-04-20 18:12:17

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

  • _潇潇暮雨
    2016-01-24 15:25:29

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

  • 淡然若水892
    2015-12-12 20:16:56

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

  • coding_0004
    2015-10-18 22:08:42

    我的也相同欸,不明觉厉

Hibernate初探之单表映射

Java持久化框架Hibernate入门教程,掌握Hibernate基本概念

74810 学习 · 793 问题

查看课程

相似问题