我编写了一个向数据库插入数据的一个测试类,里面有两个方法test1和test2。当我运行test1时向MySQL中插入一条数据,然后我再运行test2就报空指针异常了!看源码。
//此方法向数据库插入一条数据
@Test
public void testTeacherSave() {
Teacher t = new Teacher();
t.setName("t1");
t.setTitle("夏天");
t.setBirthDate(new Date());
Session session = sessionFactory.getCurrentSession();
session.beginTransaction();
session.save(t);
session.getTransaction().commit();
}
//此方法用于更新数据库的数据
@Test
public void testUpdate1() {
Session session = sessionFactory.getCurrentSession();
session.beginTransaction();
Teacher t = (Teacher) session.get(Teacher.class, 1);
session.getTransaction().commit();
t.setName("zhangsan"); //此处报空指针
Session session2 = sessionFactory.getCurrentSession();
session.beginTransaction();
session2.update(t);
session.getTransaction().commit();
}
Session session = sessionFactory.getCurrentSession();
session.beginTransaction();
Teacher t = (Teacher) session.get(Teacher.class, 1);
t.setName("zhangsan");
session2.update(t);
session.getTransaction().commit();
这样就可以了
Teacher t = (Teacher) session.get(Teacher.class, 1);说明t为null,也就是说session.get无法通过Teacher.class获取一个实例化对象
采用getCurrentSession()创建的session在commit或rollback时会自动关闭
空指针异常
新建对象
Session session = sessionFactory.getCurrentSession();
session.beginTransaction();
** Teacher t = new Teacher(); //先实例化对象,应该就不为空了**
t = (Teacher) session.get(Teacher.class, 1);
session.getTransaction().commit();
t.setName("zhangsan"); //此处报空指针,是因为,t 是空对象