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
求大神帮看下,我代码错了么?
我目前知道的是:因为你第一个session关闭了,所以内存已经结束了。下一个session是获取不到的。所以hashcode会不一样。但是我看了视频的时候,发现老师也是这样写 居然一样,我震惊了。
因为session是在commit();后自动关闭的,你可以试试 在commit前再弄个session,输出的hashcode是一样的。如果有新发现可以联系我。愿意分享心得。
但是放到前面,会提示session is closed,第二个没有办法执行了
是的,执行Junit测试的时候要选定特定的方法名。
我的也是相同的额。。。你的代码看了下,似乎也是对的啊。。。而且用你的代码测试过了。也是相同的。我怀疑是不是在执行test的时候,你选错测试方法了?选了openSession那个。。
我的也相同欸,不明觉厉